Как узнать, используется ли поврежденный файл изображения для скимминга кредитной карты?

17

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

Я не нашел подозрительного кода в местах общего пользования, которые я видел в нескольких статьях.

Я сделал найти подозрительный «сломанный» файл изображения:

/skin/adminhtml/default/default/images/db-tab-bottom-right-bg_bg.gif

Я изменил расширение файла и открыл ее, но это просто стена зашифрованного текста с JPEG-1.1разбросанными вокруг.

Как я могу узнать, если сайт взломан?

Я подтвердил, что патч был применен, но взлом мог произойти до патча.

РЕДАКТИРОВАТЬ: Уязвимая версия 1.7.0.2

travisw
источник

Ответы:

21

Конкретный ответ на ваш вопрос см. По адресу /magento//a/72700/361.

Фон

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

Оригинал статьи просто сказал (и я перефразирую),

Если хакер был в состоянии получить доступ к вашим файлам Magento, они могли бы собирать информацию от клиента

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


Не паникуйте ... это ничего особенного для Magento

С точки зрения сбора информации, нет ничего конкретного для Magento, чем любой другой сайт / платформа. Если хакер получит доступ к вашим файлам, игра фактически закончится - они смогут захватить любую информацию, какую захотят.

Лучшее, что вы можете сделать (и, в конечном счете, минимум, который вы должны делать), это поддерживать хорошую политику безопасности, соответствующую стандартам безопасности PCI индустрии обработки платежей, список вы можете найти здесь, https://www.pcisecuritystandards.org. /documents/Prioritized_Approach_for_PCI_DSS_v3_.pdf


Укрепи свой магазин

Вы действительно можете заблокировать аспекты вашего магазина, которые значительно уменьшат площадь атаки на поверхность для хакера, или, по крайней мере, замедлят их продвижение, если им удастся проникнуть /

Блокировка разрешений

Вы можете ограничить разрешения для корня документа, чтобы разрешить запись только в основные каталоги ( /varи /media)

Это то, что мы делаем по умолчанию на MageStack ,

echo -n "Fixing ownership"
chown -R $SSH_USER:$WEB_GROUP $INSTALL_PATH && echo " ... OK" || echo " ... ERROR"
INSTALL_PATH="/path/to/public_html"
chmod 750 $INSTALL_PATH
find $INSTALL_PATH -type d ! -perm 750 -exec chmod 750 {} \; && echo " ... OK" || echo " ... ERROR"
echo -n "Fixing file permissions"
find $INSTALL_PATH -type f ! -perm 740 -exec chmod 740 {} \; && echo " ... OK" || echo " ... ERROR"
echo -n "Fixing cron permissions"
find $INSTALL_PATH/*/cron.sh -type f ! -perm 750 -exec chmod 750 {} \; && echo " ... OK" || echo " ... ERROR"
echo -n "Fixing media/var file permissions"
chmod -R 760 $INSTALL_PATH/*/media $INSTALL_PATH/*/var && echo " ... OK" || echo " ... ERROR"
echo -n "Fixing media/var directory permissions"
find $INSTALL_PATH/*/media $INSTALL_PATH/*/var -type d ! -perm 770 -exec chmod 770 {} \; && echo " ... OK" || echo " ... ERROR"

Отрегулируйте INSTALL_PATH,SSH_USER,WEB_GROUPв соответствии с костюмом. Важно то, что вы SSH_USERне тот пользователь, которого PHP использует для процесса веб-сервера, в противном случае вы, по сути, предоставили бы полный доступ на запись к веб-серверу (уменьшив любые преимущества).

Заблокируйте доступ администратора / загрузчика

На MageStack вы должны установить это в ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

На Nginx вы можете использовать это,

location ~* ^/(index.php/)?admin{
  satisfy any;

  allow x.x.x.x;

  auth_basic "Login";
  auth_basic_user_file /microcloud/data/domains/x/domains/x/___general/.htpasswd;

  deny all;

  location ~* \.(php) {
    include fastcgi_params;
  }
  try_files $uri $uri/ /admin/index.php ;
}

Там немного больше документации о том, как подготовить .htpasswdфайл здесь

Заверните cron.shпроцесс

Я сталкивался с другими хостинг-провайдерами, использующими выделенные машины для использования cron / admin - это означает, что изменение cron.shфайла позволит удаленно выполнять код на cron / admin без необходимости доступа к нему. Завершение процесса с нужным пользователем в fakechroot может пойти еще дальше, чтобы заблокировать процесс.

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

Аудит, ревизия, аудит

Linux - это просто фантастика с точки зрения входа и использования, что даст вам полное представление о том, что делает ваш сервер.

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

/microcloud/logs_ro
|-dh[0-9]+
|---access-YYYY-MM-DD.log.gz
|---backup-YYYY-MM-DD.log.gz
|---magescan-YYYY-MM-DD.log.gz
|---php-differential-YYYY-MM-DD.log.gz
|-acc[0-9]+
|---access-YYYY-MM-DD.log.gz

Если вы не используете MageStack, вы можете легко воспроизвести некоторые из них с вашим собственным хостинг-провайдером, rsyncявляясь самым простым инструментом для этого.

Например. Если ваши резервные копии доступны локально, вы можете сделать следующее. Это позволит выполнить пробный прогон, сравнить два каталога и создать список исправлений diff.

rsync -na /path/to/public_html/ /path/to/backup/public_html/ > change.log
grep -E '\.php$' change.log | while read FILE; do
  diff -wp /path/to/public_html/$FILE /path/to/backup/public_html/$FILE >> php-differential.log
done

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


В итоге

  • Используйте контроль версий, легче отслеживать изменения
  • Просто иметь SSL-сертификат недостаточно, чтобы сделать ваш сайт безопасным
  • Не ждите, чтобы взломать, чтобы рассмотреть безопасность
  • То, что вы перенаправляете к своему провайдеру платежного шлюза (вместо сбора информации) - это не значит, что вы можете избежать соответствия PCI, вам все равно нужно соблюдать
  • Будьте активны, будьте осторожны и будьте внимательны - проверяйте код модуля перед его установкой, ежедневно проверяйте файлы PHP, просматривайте журналы, проверяйте доступ по FTP / SSH, регулярно меняйте пароли

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

Криминалистические расследования PCI невероятно дороги, отнимают много времени и в конечном итоге рискуют лишить вас возможности снова принимать платежи по карте. Никогда не позволяйте себе оказаться в таком положении!


Быть исправленным

В последнее время из Magento была выпущена серия патчей, исправляющих дыры, в том числе некоторые, которые позволяли выполнять удаленное выполнение кода. Вы можете получить их здесь, https://www.magentocommerce.com/products/downloads/magento/

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


источники

Бен Лессани - Сонасси
источник
4
Благодарность! Это потрясающая рецензия и много очень полезной информации.
Петр Каминский
9

Я добавляю другой ответ только потому, что мой другой на самом деле не ответил на вопрос - и, конечно, больше не нужно!

Как я могу проверить, содержит ли изображение информацию CC

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

Например.

  • Большой размер файла
  • Наличие простого текста в файле
  • Неправильные заголовки изображений

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

Наиболее распространенный эксплойт, который я видел, не включает запись данных в виде простого текста в файл с .jpg|png|gif|etcрасширением, они обычно включают в себя какое-то кодирование / шифрование, чтобы скрыть данные (например, base64и mcryptт. Д.). Что означает, что простой grep не будет работать.

Вы могли бы (и это ни в коем случае не является исчерпывающим) ...

Найти ненормально большие файлы

find \
/path/to/public_html/skin \
/path/to/public_html/media \
-type f -size +20M 2>/dev/null

Найти файлы, соответствующие регулярному выражению CC

grep -lE '([0-9]+\-){3}[0-9]{4}|[0-9]{16}' \
/path/to/public_html/skin \
/path/to/public_html/media 2>/dev/null

Проверьте правильность файлов изображений

find \
/path/to/public_html/skin \
/path/to/public_html/media -type f \
-regextype posix-egrep -regex '.*\.(jpg|gif|png|jpeg)' |\
xargs identify 1>/dev/null

Или

find \
/path/to/public_html/skin \
 -name '*' -exec file {} \; | grep -v -o -P '^.+: \w+ image'

Как я могу проверить файлы PHP в моей установке, чтобы увидеть, были ли они изменены

Самый простой способ сравнить установочные файлы - это сравнить ядро ​​с чистой копией. Это не относится к файлам вашей темы, но имеет большое значение для проверки нескольких тысяч файлов в вашей установке.

Процесс действительно прост,

Например. Для версии Magento 1.7.0.2

wget sys.sonassi.com/mage-install.sh -O mage-install.sh
bash mage-install.sh -d -r 1.7.0.2
tar xvfz latest-magento.tar.gz
diff -w --brief -r magento-ce-*/app/code/core app/code/core
diff -w --brief -r magento-ce-*/lib lib

Имейте в виду, что старые выпуски Magento (досадно) не исправлены, поэтому внесение изменений в ядро ​​приведет к отображению изменений. Чтобы избежать этого, примените патчи к только что загруженному чистому источнику, а затем снова выполните diff.

Бен Лессани - Сонасси
источник
2
Учитывая оба ваших ответа, этот, кажется, лучше относится к вопросу.
pspahn
Бен, я нажму клавишу ввода, прежде чем смогу закончить обоснование предложенного мной редактирования. Это не главное, просто то, что PCI является отраслевым стандартом, а не нормативным актом или законом, принятым государственным органом, по крайней мере, не в США: en.wikipedia.org/wiki/…
Брайан 'BJ' Хоффпауир младший
1
Я просто использовал «регулирование» в контексте взаимозаменяемости с «правилом» (не законом)
Бен Лессани - Сонасси
Цените различие, и оно может быть больше основано на локали, чем я первоначально предполагал. По словам моего отца, адвоката и сестры, декана юридической школы (я ненавижу спорить с ними, как вы можете догадаться), здесь, в США, даже слово «правило» имеет особое значение, когда перед ним стоит специальный модификатор, такой как «Промышленное правило», как в этом случай против правила агентства (когда правительственное агентство, такое как EPA, может выдавать подробные требования, которые имеют обязательную юридическую силу, как закон, но не приняты в качестве постановления палатами Конгресса Сената или Палаты представителей). Не хочу быть педантичным, просто делюсь :)
Брайан 'BJ' Хоффпауир-младший
3

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

Файловые права

Когда общий хостинг стал популярным, считалось более важным, чтобы люди не имели права просматривать контент других на одном сервере. До появления FreeBSD jail это означало:

  • ограниченные оболочки
  • / home как root: root 700
  • Аккаунты пользователей с umask 007.
  • UID, изменяющий программное обеспечение веб-сервера
  • И UID, на который он изменился, является владельцем этой учетной записи.

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

Это не сильно изменилось, и программные пакеты, предназначенные для общего хостинга (CPanel, DirectAdmin, Plex), используют эти принципы. Это означает, что основная точка входа (веб-сервер и / или интерпретатор сценариев) может выполнять запись в любой файл в учетной записи, что делает права доступа к файлам бесполезными.

Нет CC, чтобы украсть, если у вас его нет

Сообщите своему поставщику платежей CC, если данные CC действительно отправляются на ваш сервер, и если да, если они отправляются незашифрованными незашифрованными. В наши дни JavaScript достаточно мощный, и есть поставщики платежных услуг, которые используют движок JavScript вашего клиента для шифрования конфиденциальной информации перед передачей на сервер. Хотя этот сборщик информации может получить ключ сеанса, а также зашифрованные данные (и, следовательно, быть в состоянии расшифровать его), сборщик данных менее интересен, так как собранные данные больше, а ИИ бота намного сложнее. ,

Обнаружение модификации

Более 15 лет Unix, и это все еще вызывает ностальгическую улыбку на моем лице, когда я вижу реинкарнации TripWire . Git это тоже хороший инструмент для этого. По сравнению с известной хорошей версией, несколько меньше, так как она не учитывает дополнения и снова предоставляет хороший инструмент, поскольку локальные модификации сайта происходят чаще, чем первоначальные установки.

Загрузчик

Переместить загрузчик за пределы корня документа так же просто, как установить некоторую форму HTTP-аутентификации. Тогда только положите его обратно, когда вы его используете. Если это нецелесообразно, я предпочитаю блокировать его на основе удаленного адреса, а не другого уровня пользователя / пароля, особенно тех, которые отправляют пароли в виде простого текста.

WAF и альтернативы

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

  1. Тот, кто был спутником tripwire в те времена - Snort - прямо там с коммерческими WAF. У него крутая кривая обучения, но он может достаточно хорошо выявлять аномалии и известные плохие паттерны.
  2. Naxsi для nginx и mod_security для Apache отклоняют запросы, содержащие известные сигнатуры атак. Naxsi немного более универсален и отказывает в обслуживании для «вещей, которые здесь не должны быть», таких как скрытый SQL - в отличие от части известного кусочка SQL.
  3. Fail2ban / sshguard находится между двумя предыдущими. Они могут обрабатывать различные типы журналов и выполнять настраиваемые действия. Недостатком является то, что они работают после факта. Журналы обычно попадают в журнал после завершения действия, и, кроме того, инструменты имеют порог для борьбы с ложными срабатываниями. Этого может быть достаточно, чтобы злоумышленник получил доступ, если он получил точную информацию на более ранних этапах.

Я думаю, что мы охватили много вещей, но позвольте мне закончить с моим любимым:


ОСТАНОВИТЬ ИСПОЛЬЗОВАНИЕ FTP


Там. Я сказал это. А вот и я: https://wiki.filezilla-project.org/Howto

Мелвин
источник
1

В этом новом взломе нет ничего определенного, вчера Бен Маркс написал, что они исследуют проблему, и эта статья тоже есть.

Лучший подход, который вы можете попробовать, - это войти через SSH и выполнить поиск во всех файлах, которые у вас есть, для определенной строки, что-то вроде

find . | xargs grep 'db-tab-bottom-right-bg_bg.gif' -sl

из вашей корневой папки Magento, и если вы получите совпадение, вручную проверьте файл, чтобы увидеть, что происходит. То же самое с другими строками, такими как «END PUBLIC KEY», например.

mbalparda
источник