Запретить загрузку исполняемых файлов. (nginx, phpfpm.)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модератор: SLEDopit

Ism
Сообщения: 1261
Статус: Никто, по сути быдло

Re: Запретить загрузку исполняемых файлов.

Сообщение Ism »

И всетаки лучше уточнить задачу. А то началось смешение взлома оси со взломом сайта, оно рядом, но способы разные.

Я бы не морочился, а сделал ты обработку с исключением, сервер принимает картинку, пытается у себя отобразить или конвертировать, в случае отказа это НЕ картинка. Вконтакт так и делает судя по функционалу
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Запретить загрузку исполняемых файлов.

Сообщение Ленивая Бестолочь »

drBatty писал(а):
18.10.2013 07:04
что это?

это подсчёт кол-ва картинок, которые содержат в себе комбинацию '<?'. странно, я думал это будет понятно.
drBatty писал(а):
18.10.2013 07:04
любой бит в сжатом файле имеет энтропию равную 1

это я понимаю, просто очевидно, что если стоит задача засунуть на файл пхп скрипт под видом картинки, то картинка будет не сжата.
возможно даже можно найти такой формат/изображение, которое будет валидной картинкой и при этом состоять только их ascii.
drBatty писал(а):
18.10.2013 07:04
ну дык исправьте, раз ВЫ вынуждены работать с такими кривыми движками. Оно жеж ВАМ надо.

ну я рад за вас, просто я считаю, что в данном случае логичней, чтобы погромист написал так, чтобы работало на дефолтной конфигурации, нежели иметь движок, который требует донастройки сервера.
опять же, я вот считаю, что в цк не дураки сидят и наверно не просто так в дебиане, который чуть ли не самый популярный lamp такой дефолт.
drBatty писал(а):
18.10.2013 07:04
IRL бэкдор это вовсе не "гора былокода", достаточно в нужном месте "забыть" "запятую поставить".
гора быдлокода тоже есть конечно, но лишь для маскировки основной ошибки.

может быть, я честно говоря не знаю, да и мне не сильно интересно - умышленная была ошибка или баг. главное, что я её нашел и закрыл.
drBatty писал(а):
18.10.2013 07:04
PDO сравнительно новое. Кто же будет бесплатно ВСЁ переписывать, если оно и так работает???

нда? а я всегда думал, что опенсорц, кококо, пишем для души, прозрачный код и т.п., а в загнивающих ынтерпрайзах переизобретают велосипеды и всё плохо by design. :3
drBatty писал(а):
18.10.2013 07:13
есть. Среда всегда есть. ОС это и есть такая среда.

ну, вы к сожалению не признаёте ничьих конфигураций, кроме своей, но я бы всё же сказал, что в том же дебиане cgi вырублен по умолчанию, или ограничен отдельным каталогом, не помню.
так что тут вроде как lsm прав.
Ism писал(а):
18.10.2013 04:07
Если php скрипт, значит определяется по ключевым словам, загоняете словарь в mysql, по regex выдергиваете из картинки подозрительные комбинации, наверняка для php есть характерные. При совпадении отбросить картинку, чтоб было меньше ложных срабатываний уточнить условия

вообще идея прикольная, правда я тоже не понял, зачем тут база.
Ism писал(а):
18.10.2013 08:16
сервер принимает картинку, пытается у себя отобразить или конвертировать, в случае отказа это НЕ картинка

если взять
foto.jpeg
scritp.php

cat script.php >> foto.jpeg
то полученный результат будет отображаться, ресайзиться и т.п. как картинка и большинство библиотек будет считать его валидной картинкой, а заодно запускаться как пхп-скрипт без каких-либо проблем.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Запретить загрузку исполняемых файлов.

Сообщение Bizdelnick »

Ism писал(а):
18.10.2013 01:16
Кроме того php не пуп земли. Я плохо знаю вебпрограммирование, но есть cgi http://ru.wikipedia.org/wiki/CGI и его можно написать на любом языке

Не знаете веб-программирования - почитайте хотя бы про настройку веб-сервера. CGI-скрипты лежат в совсем отдельном каталоге, вне docroot, и загрузить туда что бы то ни было php-скрипт не может. Если, конечно, админ не идиот и не вредитель.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ism
Сообщения: 1261
Статус: Никто, по сути быдло

Re: Запретить загрузку исполняемых файлов.

Сообщение Ism »

Ленивая Бестолочь писал(а):
18.10.2013 10:11
Ism писал(а):
18.10.2013 04:07
Если php скрипт, значит определяется по ключевым словам, загоняете словарь в mysql, по regex выдергиваете из картинки подозрительные комбинации, наверняка для php есть характерные. При совпадении отбросить картинку, чтоб было меньше ложных срабатываний уточнить условия

вообще идея прикольная, правда я тоже не понял, зачем тут база.
Ism писал(а):
18.10.2013 08:16
сервер принимает картинку, пытается у себя отобразить или конвертировать, в случае отказа это НЕ картинка

если взять
foto.jpeg
scritp.php

cat script.php >> foto.jpeg
то полученный результат будет отображаться, ресайзиться и т.п. как картинка и большинство библиотек будет считать его валидной картинкой, а заодно запускаться как пхп-скрипт без каких-либо проблем.

1 mysql с fulltext индексом позволяет быстро делать поиск сразу по множеству слов, тотже regex для анализа слишком медленный и не позволяет делать сложный анализ текста

2 Упс, как это, php to jpg ?
Вот что выдал ImageMagic
convert ./actionscript.php test.jpg
convert: no decode delegate for this image format `./actionscript.php' @ error/constitute.c/ReadImage/544.
convert: no images defined `test.jpg' @ error/convert.c/ConvertImageCommand/3044.

Можете сказать как вам это удалось сделать ?
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Запретить загрузку исполняемых файлов.

Сообщение Ленивая Бестолочь »

Код: Выделить всё

root@quake:/tmp# cat script.php
<? echo "evil code\n";
root@quake:/tmp# file script.php
script.php: ASCII text
root@quake:/tmp# file image.png
image.png: PNG image data, 400 x 400, 8-bit/color RGBA, non-interlaced
root@quake:/tmp# cat image.png script.php > test.png
root@quake:/tmp# file test.png
test.png: PNG image data, 400 x 400, 8-bit/color RGBA, non-interlaced
root@quake:/tmp# php test.png | tail -n 1
���DĔ
     �М�=�h�"���3mv�Gj~▒S�龴iN�c▒�LDWzQM�hР!�
                                             ▒s�K|�IEND�B`�evil code
root@quake:/tmp# convert test.png test.jpeg
root@quake:/tmp# file test.jpeg
test.jpeg: JPEG image data, JFIF standard 1.01
root@quake:/tmp#


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

Ism писал(а):
19.10.2013 04:38
mysql с fulltext индексом позволяет быстро делать поиск сразу по множеству слов, тотже regex для анализа слишком медленный и не позволяет делать сложный анализ текста

я понял, это действительно интересно. можно попробовать написать в общем виду проверку на скрипто-код там, где его быть не должно.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Ism
Сообщения: 1261
Статус: Никто, по сути быдло

Re: Запретить загрузку исполняемых файлов.

Сообщение Ism »

Ленивая Бестолочь писал(а):
19.10.2013 05:28
таким образом мы видим, что интерпретатор пхп выполняет такие файлы, по факту выводя картинку на экран в виде текста (это не важно), а затем выполняя вредоносный код (это важно).
при этом большинство, если не все, проги и либы для работы с графикой отлично работают с полученным файлом как с картинкой.

Ism писал(а):
19.10.2013 04:38
mysql с fulltext индексом позволяет быстро делать поиск сразу по множеству слов, тотже regex для анализа слишком медленный и не позволяет делать сложный анализ текста

я понял, это действительно интересно. можно попробовать написать в общем виду проверку на скрипто-код там, где его быть не должно.

cat image.png script.php > test.png
1 Вы не конвертируете, а модифицируете файл, это другое.
Через конвертацию пройдут только картинки, скрипт просто вызовет отказ как бы ни был спрятан или будет полностью уничтожен алгоритмом сжатия

2 В данном случае можно обычный индекс для поиска ключевых слов
Но fulltext даёт гораздо больше возможностей для условий
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Запретить загрузку исполняемых файлов.

Сообщение Ленивая Бестолочь »

Ism писал(а):
19.10.2013 06:14
1 Вы не конвертируете, а модифицируете файл, это другое.

я имел в виду это:
Ленивая Бестолоч... писал(а):
19.10.2013 05:28
root@quake:/tmp# convert test.png test.jpeg

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

Re: Запретить загрузку исполняемых файлов.

Сообщение Ism »

Ленивая Бестолочь писал(а):
19.10.2013 14:19
Ism писал(а):
19.10.2013 06:14
1 Вы не конвертируете, а модифицируете файл, это другое.

я имел в виду это:
Ленивая Бестолоч... писал(а):
19.10.2013 05:28
root@quake:/tmp# convert test.png test.jpeg


Возможно есть опции конвертации, которые полностью проверяют картинку или конвертер отсекающий лишнее. Скрипт это прицеп, а значит конвертер может знать что можно отбросить как лишнее
Кроме того прицеп скрипт будет сохраняться после конвертаци, а значит может быть выявлен простым сравнением по последним байтам
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Запретить загрузку исполняемых файлов.

Сообщение drBatty »

Ленивая Бестолоч... писал(а):
18.10.2013 10:11
это подсчёт кол-ва картинок, которые содержат в себе комбинацию '<?'. странно, я думал это будет понятно.

непонятно, при чём тут это? Ясное дело, что математическое ожидание увидеть в двух байтах <? равно 1/65536. В любой картинке байтов не меньше 10К, и потому вероятность встречи <? около 1. Т.ч. я и без вас знаю, что таких картинок, чуть меньше, чем все.
Ленивая Бестолоч... писал(а):
18.10.2013 10:11
это я понимаю, просто очевидно, что если стоит задача засунуть на файл пхп скрипт под видом картинки, то картинка будет не сжата.
возможно даже можно найти такой формат/изображение, которое будет валидной картинкой и при этом состоять только их ascii.

ну вообще почитайте про XPM, это валидный C.

Во вторых, картинка совсем не обязательно обязана быть валидной.
Ленивая Бестолоч... писал(а):
18.10.2013 10:11
ну я рад за вас, просто я считаю, что в данном случае логичней, чтобы погромист написал так, чтобы работало на дефолтной конфигурации, нежели иметь движок, который требует донастройки сервера.
опять же, я вот считаю, что в цк не дураки сидят и наверно не просто так в дебиане, который чуть ли не самый популярный lamp такой дефолт.

в москве жить лучше, чем пить пиво
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: Запретить загрузку исполняемых файлов.

Сообщение BigBrother »

Ого, сколько идей.
Всем спасибо, я сообщил руководство, что это лучше делать через коды или средствами фреймверка, на котором они пишут проекты, ибо nginx такое не умеет.
Спасибо сказали:
Ответить