Найти вредоносные PDF-файлы с помощью проверки PHP?

В настоящее время для проверки файлов реализованы следующие действия,

  • Проверка типа файла с использованием сведений MIME, таких как application/pdf
  • Проверка расширений файлов вместе с данными MIME.

Но некоторые PDF-файлы содержат вредоносные скрипты, такие как JavaScript, для повреждения системы

Подробнее об атаках PDF:

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2008-2992

Вопрос: Рекомендуемые решения для этого случая?


person Sundar    schedule 21.09.2016    source источник
comment
Скорее всего, принадлежит security.stackexchange.com. Не могу предложить этот вопрос для переноса, так как security.stackexchange.com не входит в топ-5 списка.   -  person Wilt    schedule 21.09.2016
comment
Я проголосовал, это хороший вопрос. На самом деле вы можете получить там ответы получше... Проверьте также эти другие сообщения о безопасности pdf на security.stackexchange.com< /б>.   -  person Wilt    schedule 21.09.2016


Ответы (3)


Взгляните на этот проект https://github.com/urule99/jsunpack-n - A Универсальный распаковщик JavaScript

jsunpack-n эмулирует функциональность браузера при посещении URL-адреса. Его цель — обнаруживать эксплойты, нацеленные на уязвимости браузера и подключаемых модулей браузера. Он принимает множество различных типов входных данных: (также PDF*)

Изучив этот файл https://raw.githubusercontent.com/urule99/jsunpack-n/master/pre.js похоже, что он напрямую решает вашу проблему.

var util = {
375     printf : function(a,b){print ("//alert CVE-2008-2992 util.printf length ("+ a.length + "," + b.length + ")\n"); },

При загрузке я загружал pdf в этот инструмент и проверял результаты.

Ниже приведены некоторые интересные ресурсы, связанные с этой уязвимостью, которые все подробно объясняют.

http://resources.infosecinstitute.com/hacking-pdf-part-1/

http://resources.infosecinstitute.com/hacking-pdf-part-2/

Во второй части статьи есть фрагмент, говорящий о том, что вы можете использовать Spider monkey для запуска pre.js (файл, о котором я упоминал ранее), чтобы получить информацию о CVE.

js -f pre.js -f util_printf.pdf.out

// предупреждение CVE-2008-2992 длина util.printf (13, не определено)

person Pawel Dubiel    schedule 24.09.2016

Я сделал это один раз несколько лет назад (кода больше нет).

  • On upload
    • Scan the file for malicious code (similar to a virus scanner)
    • Запретить или разрешить файл на основе функциональной логики

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

Вам нужно будет найти словарь распространенного вредоносного кода или создать свой собственный и открыть файл с функциональностью php и сканировать элементы в вашем словаре (массиве).

В этот момент вы, вероятно, думаете, что это не очень оптимизировано или будет медленным... и т.д.

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

Что касается сканеров, я уверен, что вы можете найти сервисы или открытый исходный код, только что нашел это; https://github.com/mikestowe/Malicious-Code-Scanner/blob/master/phpMalCodeScanner.php (никогда не использовал или рекомендую)

person Perspective    schedule 23.09.2016

Добавление еще одного ответа, поскольку этот проект ниже намного проще в использовании, а также может найти уязвимость CVE-2008-2992. Я знаю, что вы спрашиваете о PHP, но вы можете просто запустить любой скрипт из PHP, используя, например, escapeshellcmd

peepdf — это инструмент Python для изучения PDF-файлов, чтобы выяснить, может ли файл быть опасным или нет. Цель этого инструмента — предоставить все необходимые компоненты, которые могут понадобиться исследователю безопасности для анализа PDF без использования 3 или 4 инструментов для выполнения всех задач. С помощью peepdf можно увидеть все объекты в документе с указанием подозрительных элементов, поддерживает все наиболее часто используемые фильтры и кодировки, может анализировать различные версии файла, потоки объектов и зашифрованные файлы.

https://github.com/jesparza/peepdf

Инструкции: http://eternal-todo.com/tools/peepdf-pdf-analysis-tool

и вы используете его, как показано ниже, и в конце вы получаете все проблемные элементы с информацией CVE

$ ./peepdf.py -f fcexploit.pdf

File: fcexploit.pdf
MD5: 659cf4c6baa87b082227540047538c2a
SHA1: a93bf00077e761152d4ff8a695c423d14c9a66c9
Size: 25169 bytes
Version: 1.3
Binary: True
Linearized: False
Encrypted: False
Updates: 0
Objects: 18
Streams: 5
Comments: 0
Errors: 1

Version 0:
    Catalog: 27
    Info: 11
    Objects (18): [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 23, 24, 25, 26, 27, 28]
        Errors (2): [11, 25]
    Streams (5): [5, 7, 9, 10, 11]
        Encoded (4): [5, 7, 9, 10]
    Objects with JS code (1): [5]
    Suspicious elements:
        /OpenAction: [1]
        /JS: [4]
        /JavaScript: [4]
        getAnnots (CVE-2009-1492): [5] 
person Pawel Dubiel    schedule 24.09.2016