ISSN 0236-235X (P)
ISSN 2311-2735 (E)
1

16 Марта 2024

Разработка правил по обнаружению скрытых данных в документах PDF

DOI:10.15827/0236-235X.134.295-300
Дата подачи статьи: 16.12.2020
УДК: 004.056

Сергеев А.В. (profitdre@gmail.com) - Национальный исследовательский университет «МЭИ», кафедра прикладной математики и искусственного интеллекта (аспирант), Москва, Россия, Хорев П.Б. (pbkh@yandex.ru) - Национальный исследовательский университет «Московский энергетический институт» (профессор), Москва, Россия, кандидат технических наук
Ключевые слова: стеганография, скрытие данных, система suricata, язык lua, формат pdf
Keywords: steganography, data hiding, suricata system, lua language, pdf format


     

С каждым годом обеспечение информа-ционной безопасности становится все более важным. Одна из задач информационной безопасности – предотвращение утечки конфиденциальных данных (коммерческой тайны, персональных данных и т.п.). Для ее выполнения разработано множество систем по предотвращению утечки данных (DLP-систем). Однако, как и в любой системе, эффективность использования  этих систем во многом определяется правильной настройкой (созданием правил обнаружения конфиденциальной информации в потоке данных и реагирования на эти события), гибкостью средств управления системой, умением подстраиваться под новые разновидности атак.

Одной из угроз безопасности, выявленных ФСТЭК России, является УБИ.111 «Угроза пе-редачи данных по скрытым каналам». Угроза заключается в возможности осуществления нарушителем неправомерного вывода защи-щаемой информации из системы, а также в передаче управляющих команд путем нестандартного (незаметного, скрытого) размещения в легитимно передаваемых по сети (или сохраняемых на отчуждаемые носители) открытых данных, замаскировав под служебные протоколы или скрыв в потоке других данных (стеганография) и т.п. Данная угроза обусловлена недостаточностью мер защиты информации от утечки, а также контроля потоков дан-ных [1].

Одним из популярных форматов обмена информации в корпоративной среде является PDF. Данный формат очень привлекателен для нарушителей ‒ неоднократно были зафиксиро-ваны факты его использования в качестве контейнера для распространения вредоносного ПО [2, 3]. Также возможно использование документа в формате PDF как стеганографического контейнера для скрытой передачи конфиденциальных данных.

Стоит отметить, что популярные в настоящее время DLP-системы игнорируют такую проблему и не содержат средств для обнаружения скрытой информации в подобных данных. Для самостоятельного анализа исследователями проблемы были предложены и разработаны различные инструменты по обнаружению скрытой информации в стегоконтейнерах (в основном внутри изображений). Но, тем не менее, работ и инструментов для обнаружения стегоконтейнеров внутри документов формата PDF [4, 5] все еще недостаточно.

DLP-системы относятся к проприетарному ПО, являющемуся частной собственностью авторов или правообладателей и не удовлетворяющему критериям свободы ПО, поэтому невозможно самостоятельно добавлять в них необходимый функционал.

Из анализируемых научных работ стоит выделить статью [6], освещающую проблемы DLP с обработкой зашифрованных и скрытых данных, а также [7], посвященную настройкам средств мониторинга сети по обнаружению угроз. Однако публикаций, касающихся автоматизированных средств по обнаружению скрытых вложений, авторы данной статьи не обнаружили, а потому результат, представленный в работе, в настоящее время имеет очевидную актуальность.

Далее в статье рассматривается возможность использования системы обнаружения и предотвращения вторжений (IDS, Intrusion Detection and Prevention System) для включения в них дополнительных средств предотвращения утечек данных.

Для достижения цели по минимизации информационных рисков и предотвращению утечки данных рассматривается разработка правил обнаружения скрытых вложений в документах формата PDF и включения их в IDS-систему Suricata.

Структура документа PDF

PDF поддерживает несколько базовых типов данных ‒ девять типов объектов: null, bool, integer, real number, name, string, array, dictionary и stream.

Строки в PDF (String Objects) представляют собой последовательность 8-битных символов с помощью обратного слеша (\73), написанных либо в виде буквенных символов в кодировке UTF-8, заключенных в круглые скобки (и), либо как шестнадцатеричные данные, заключенные в угловые скобки <и>.

В документе формата PDF могут также присутствовать и другие элементы, например, заголовок PDF-документа, который может быть указан в качестве вспомогательной информации, используя символ (/), за которым следует строка в кодировке UTF-8 со специальной формой кодирования для любого нерегулярного символа. Нерегулярными являются символы, которые определены вне диапазона от 0x21 (!) до 0x7E (~), а также любые символы пробела. Эти нерегулярные символы кодируются, начиная с символа #, а затем в виде шестнадцатеричного кода с двумя цифрами для символа.

В качестве подобных заголовков можно выделить и нежелательные элементы, такие как сценарии на языке JavaScript, дополнительно вложенные в документ файлы. В документ формата PDF можно вложить PDF-файлы и файлы других типов. Далее приведены примеры использования элементов в документе формата PDF. В зависимости от конструктора PDF-документа определяется, как вложенный файл будет представлен ‒ в виде потока или объекта. Основная разница состоит в том, что в потоке вложенный документ будет подвержен сжатию, а в объекте представлен без изменений:

-     объект потока с использованием Java-Script:

43 0 obj <> endobj;

-     PDF с вложенным файлом в виде потока:

<>/F(1.zip)/Type/Filespec/UF(1.zip)>>;

-     PDF с вложенным файлом в виде объекта:

<>.

Вложенные файлы и сценарии представляют собой потенциальную угрозу безопасности, так как могут включать вредоносное содержимое, открывать другие опасные файлы или запускать потенциально опасные приложения.

Разработка и анализ результатов

IDS (Intrusion Detection System) ‒ система обнаружения вторжений, предназначенная для регистрации подозрительных действий в сети или на отдельном компьютере, ведения журналов событий и уведомления о них ответственного за информационную безопасность сотрудника. Одной из распространенных систем типа IDS является Suricata. Она представляет собой бесплатный многозадачный и надежный механизм обнаружения сетевых угроз с открытым исходным кодом, способный обнаруживать вторжения в реальном времени, контролировать безопасность сети и обрабатывать файлы PCAP (Packet Capture Data), содержащие данные перехваченных сетевых пакетов, в автономном режиме.

Пример правила Suricata:

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"ET TROJAN Likely Fake Antivirus Download ws.exe"; flow:established,to_server; content:"GET"; http_method; content:"/install/ws.exe"; http_uri; nocase; reference:url,doc.emergingthreats.net/2010051; classtype:trojan-activity; sid:2010051; rev:4;)

Этот пример показывает, что данное правило будет генерировать предупреждение, если выявит пакет с запросом, который отправляется на внешний контур по любому порту, обнаружив в пакете сочетание символов /install/ws.exe (без учета регистра символов). В ходе анализа выяснилось, что только правил Suricata недостаточно, чтобы обнаружить в файлах скрытые элементы. Механизм Suricata поддерживает правила, написанные на встраиваемом языке сценариев Lua. Это значит, что есть возможность извлекать и проверять файлы, передающиеся по HTTP, проверять сжатые данные, производить распознавание по URI с использованием данных cookie, заголовков и других данных. Благодаря модульной структуре системы Suricata можно оперативно подключить новый модуль для перехвата и анализа данных.

Для эффективного использования возможности инициализации правила можно добавить условие проверки заголовка файла %PDF-. Пример правила с использованием сценария Lua:

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"Strange PDF File"; flow:establish­ed,to_client; file_data; content:"%PDF-"; within:5; luajit:pdfcheck.lua; classtype:policy-violation; sid:1000001; rev:1;)

Спецификация формата PDF допускает замену элементов заголовка на буквенно-цифровые символы в шестнадцатеричном представлении. Использование шестнадцатеричного представления в именах – один из способов обфускации имени, позволяющий избежать об-наружения механизмами, которые ищут нормальное, незапутанное имя (/JavaScript). В записи /Java#53cript, например, #53 означает шестнадцатеричное представление буквы S.

Стоит отметить, что отсутствуют ограничения на количество символов в имени, которые можно заменить их шестнадцатеричным представлением.

Таким образом, для достижения поставленной цели необходимо разработать сценарий для системы Suricata на языке Lua, выполняющий две функции – инициализацию и сопоставление.

Для работы с файлами в потоке необходимо воспользоваться функцией init. Покажем правило Lua с выборкой данных из потока. Полученные данные нужны от Suricata для дальнейшего анализа. Для PDF-документа понадобится тело HTTP-ответа:

function init(args)

return {["http.response_body"] = tostring(true)}

end

Определим функцию сопоставления, которая должна получить тело ответа HTTP и сравнить с черным списком нежелательных объектов. Этап сравнения выведен в отдельную функцию, которая должна вернуть 1, если что-то будет обнаружено, и 0 в противном случае:

function match(args)

return PDFCheck(tostring(args["http.response_body"]))

end

Представим код для обнаружения сценариев JavaScript, вложенных данных с возможной обфускацией. Функция PDFCheck принимает строку в качестве входных данных (Input), затем начинает поиск имен заголовка во входных данных, сравнивая с черным списком (Blacklist), а также осуществляет поиск ключевых слов по окончании объекта и анализ данных между ними. Для каждого найденного имени проверяем, содержит ли оно символ # (например, может ли оно быть запутано), то есть пытаемся преобразовать имя (заменив шестнадцатеричное представление соответствующим кодом ANSI). И, наконец, проверяем, есть ли это имя в черном списке:

Blacklist = {["/Desc"] = true;["/EmbeddedFiles"] = true;["/JavaScript"] = true; }

function PDFCheck(Input)

for HeaderName in Input:gmatch("/[a-zA-Z0-9_#]+") do

if HeaderName:find("#") then

local ConvName = HeaderName:gsub("#[a-fA-F0-9][a-fA-F0-9]", function(hex) return string.char(tonumber(hex:sub(2), 16)) end)

if Blacklist[ConvName] then

return 1

end

end

end

return 0

end

Следующим шагом работы была апробация полученных результатов, для чего подготовлено 20 PDF-документов, 10 из которых с вложениями и сценарием на JavaScript. Необходимо проверить разработанные средства на наличие в них ошибок первого и второго рода. Полученные результаты были неудовлетворительными, так как обнаружены только 6 из 10 документов с вложениями. Дальнейший анализ позволил выявить следующие особенности формата PDF.

1. Формат чувствителен к регистру имен: достаточно изменить регистр одного из символов, чтобы объект не выполнял свои функции. Например, если изменить в документе объект /EmbeddedFiles на /EmBeddedFiles, то программа для чтения PDF-документов не обнаружит данное вложение.

2. Отсутствует привязка к задекларированным полям: было обнаружено, что после изменения названия объекта на любое другое документ считался полностью корректным и целостным. Пример: изменение /JavaScript на /NOTaScript.

Данные выводы были проверены в трех популярных программах для чтения документов формата PDF: Adobe Acrobat XI PRO, Foxit Advanced PDF Editor и PDF-XChange Editor. После анализа полученных результатов был изменен подход к решению поставленной задачи, что привело к использованию белого списка из задекларированных объектов без нежелательных элементов.

Исследуя стандарт ISO 32000, описывающий структуру PDF-документа, был составлен белый список (whitelist). Богатый функционал формата PDF позволяет внедрять собственные шрифты, но такая возможность несет опасность внедрения вредоносного кода в виде сте-гоконтейнера. Поэтому в белый список были добавлены 14 стандартных шрифтов, которые поставляются вместе с пакетом Adobe Acrobat. Далее показан измененный код по обнаружению вложенных данных, сценариев JavaScript, вложенных шрифтов и межконтейнерных вложений:

function PDFCheck(Input)

for HeaderName in Input:gmatch"/[a-zA-Z0-9_#]+" do

if whitelist[HeaderName] then

return 1

end

if HeaderName:find("#") then

local ConvName = HeaderName:gsub("#[a-fA-F0-9][a-fA-F0-9]", function(hex) return string.char(tonumber(hex:sub(2), 16)) end)

  if whitelist[ConvName] then

  return 1

  end

end

end

for sBlock in Input:gmatch"%f[^obj][^%d]*" do

if (string.len(sBlock)> 2) then

return (string.len(sBlock))

end

end

return 0

end

Заключение

Отметим, что поддержка языка Lua в системе Suricata позволяет реализовать достаточно сложные методы анализа PDF-докумен­тов, что нельзя сделать с помощью простых правил. Однако каждое дополнительное правило будет влиять на производительность системы обнаружения атак. Разработанные на языке Lua сценарии были внедрены в IDS Suricata, после чего зафиксировано среднее время работы 43 секунды (от 28 до 58 секунд в зависимости от объема документа). Но такое увеличение времени передачи данных, содержащих PDF-документы, можно считать оправданным, поскольку появляется возможность своевременно обнаружить внутри документов формата PDF стегоконтейнер с потенциально опасным содержимым, которое может привести к утечке конфиденциальной информации.

Литература

1.    Wendzel S., Mazurczyk W., Caviglione L., Meier M. Hidden and uncontrolled – on the emergence of network steganographic threats. ISSE 2014 Securing Electronic Business Processes, 2014, pp. 123–133. DOI: 10.1007/978-3-658-06708-3_9.

2.    Stevenson J. Attack Using Steganography Bypasses DLP Systems. 2018. URL: https://www.deep-secure.com/blog/61-attack-using-steganography-bypasses-dlp-systems.php (дата обращения: 13.12.2020).

3.    Araujo I.I., Kazemian H. Vulnerability exploitations using steganography in PDF files. IJCNA, 2020, vol. 7, no. 1, pp. 10–18. DOI: 10.22247/ijcna/2020/193270.

4.    Sergeev A.V., Khorev P.B. Review of the algorithms steganography in PDF documents and analysis. Proc. MWENT, 2020, pp. 1–4. DOI: 10.1109/MWENT47943.2020.9067465.

5.    Sergeev A.V., Khorev P.B. Analysis of methods for hiding information in PDF documents and opportunities for their progress. Proc. Intern. Youth Conf. REEPE, 2020, pp. 1–4. DOI: 10.1109/REEPE49198.2020.9059117.

6.    Tahboub R., Saleh Y. Data leakage/loss prevention systems (DLP). Proc. WCCAIS, 2014, pp. 1–6. DOI: 10.1109/WCCAIS.2014.6916624.

7.    Singh G., Goyal S., Agarwal R. Intrusion detection using network monitoring tools. SSRN Electronic Journal, 2014, pp. 1–12. URL: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2426105 (дата обращения: 13.12.2020). DOI: 10.2139/ssrn.2426105.

References

  1. Wendzel S., Mazurczyk W., Caviglione L., Meier M. Hidden and uncontrolled – on the emergence of network steganographic threats. ISSE 2014 Securing Electronic Business Processes, 2014, pp. 123–133. DOI: 10.1007/978-3-658-06708-3_9.
  2. Stevenson J. Attack Using Steganography Bypasses DLP Systems. 2018. Available at: https://www.
    deep-secure.com/blog/61-attack-using-steganography-bypasses-dlp-systems.php (accessed December 13, 2020).
  3. Araujo I.I., Kazemian H. Vulnerability exploitations using steganography in PDF files. IJCNA, 2020, vol. 7, no. 1, pp. 10–18. DOI: 10.22247/ijcna/2020/193270.
  4. Sergeev A.V., Khorev P.B. Review of the algorithms steganography in PDF documents and analysis. Proc. MWENT, 2020, pp. 1–4. DOI: 10.1109/MWENT47943.2020.9067465.
  5. Sergeev A.V., Khorev P.B. Analysis of methods for hiding information in PDF documents and opportunities for their progress. Proc. Intern. Youth Conf. REEPE, 2020, pp. 1–4. DOI: 10.1109/REEPE49198.
    2020.9059117.
  6. Tahboub R., Saleh Y. Data leakage/loss prevention systems (DLP). Proc. WCCAIS, 2014, pp. 1–6. DOI: 10.1109/WCCAIS.2014.6916624.
  7. Singh G., Goyal S., Agarwal R. Intrusion detection using network monitoring tools. SSRN Electronic Journal, 2014, pp. 1–12. Available at: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2426105 (accessed December 13, 2020). DOI: 10.2139/ssrn.2426105.


http://swsys.ru/index.php?id=4818&lang=.&page=article


Perhaps, you might be interested in the following articles of similar topics: