Comment savoir si un fichier image corrompu est utilisé pour l'écrémage de carte de crédit?


17

Je travaille avec un site qui, selon moi, a été piraté pour collecter les données de carte de crédit des clients, mais je ne peux pas en être certain.

Je n'ai trouvé aucun code suspect dans les endroits courants que j'ai vus suggérés dans plusieurs articles.

Je l' ai trouver un fichier d'image suspecte « cassé » en:

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

J'ai changé l'extension de fichier et l'ai ouverte, mais ce n'est qu'un mur de texte crypté avec des JPEG-1.1éparpillées.

Comment savoir si le site est compromis?

J'ai confirmé que le correctif a été appliqué, mais le piratage aurait pu se produire avant le correctif.

EDIT: la version affectée est 1.7.0.2

Réponses:


21

Pour la réponse spécifique à votre question, voir /magento//a/72700/361

Contexte

Premièrement, il n'y a pas d'exploit spécifique - il y a actuellement une série d'articles faisant le tour qui ont mal lu et mal compris l'article source.

L' article original disait simplement (et je paraphrase),

Si un pirate était en mesure d'obtenir l' accès à vos fichiers Magento, ils peuvent capturer des informations de votre client

L'essentiel étant que le pirate informatique ait réellement besoin d'accéder à votre serveur et de modifier des fichiers.


Pas de panique ... ce n'est rien de spécifique à Magento

En termes de capture d'informations, il n'y a rien de spécifique à Magento que tout autre site / plateforme. Si un pirate a accès à vos fichiers, le jeu est effectivement terminé - il serait capable de capturer toutes les informations qu'il voulait.

Le mieux que vous puissiez faire (et, finalement, le minimum que vous devriez faire) est de maintenir une bonne politique de sécurité qui adhère aux normes de sécurité PCI de l'industrie du traitement des paiements, vous pouvez trouver la liste ici, https://www.pcisecuritystandards.org /documents/Prioritized_Approach_for_PCI_DSS_v3_.pdf


Durcissez votre magasin

Vous pouvez vraiment verrouiller les facettes de votre magasin qui réduisent considérablement la zone d'attaque de surface pour un pirate, ou au moins, ralentissent leur progression s'ils parviennent à entrer /

Verrouiller les autorisations

Vous pouvez restreindre les autorisations sur la racine du document pour autoriser uniquement l'écriture dans les répertoires essentiels ( /varet /media)

C'est ce que nous faisons par défaut sur 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"

Ajustez INSTALL_PATH,SSH_USER,WEB_GROUPen fonction. Ce qui est important, c'est que vous SSH_USERn'êtes pas le même utilisateur que PHP utilise pour le processus de serveur Web, sinon, vous fourniriez essentiellement un accès complet en écriture au serveur Web (atténuant les avantages).

Verrouillez votre accès administrateur / téléchargeur

Sur MageStack, vous définiriez cela dans ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

Sur Nginx, vous pouvez utiliser ceci,

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 ;
}

Il y a un peu plus de documentation sur la façon de préparer un .htpasswdfichier ici

Envelopper le cron.shprocessus

J'ai rencontré d'autres fournisseurs d'hébergement utilisant des machines dédiées pour une utilisation cron / admin - ce qui signifie que la modification du cron.shfichier permettrait l'exécution de code à distance sur cron / admin sans jamais avoir besoin d'y accéder. Envelopper le processus avec le bon utilisateur dans une fakechroot peut aller un peu plus loin pour verrouiller le processus.

Il y a beaucoup trop de code pour moi, mais il y a un script ici . Il est spécifique à MageStack, mais pourrait être ajusté pour une utilisation sur des configurations de serveur moins élégantes :)

Audit, audit, audit

Linux est fantastique en termes de connexion et d'exploitation qui vous donnera un aperçu complet de ce que fait votre serveur.

Une fonctionnalité fantastique sur MageStack est l' outil d'audit qui enregistre tous les types d'accès et même les modifications de fichiers sur une base quotidienne. Vous pouvez trouver les journaux ici,

/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

Si vous n'utilisez pas MageStack, vous pouvez répliquer une partie de cela avec votre propre fournisseur d'hébergement, ce qui rsyncest l'outil le plus simple pour le faire.

Par exemple. Si vos sauvegardes sont disponibles localement, vous pouvez procéder comme suit. Cela va exécuter à sec comparer deux répertoires et produire une liste de correctifs 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

Les modifications PHP sont si peu fréquentes que vous pouvez planifier leur exécution quotidiennement (ou plusieurs fois par jour) et vous informer par e-mail en cas de changement de fichier PHP.


En résumé

  • Utilisez le contrôle de version, il est plus facile de suivre les modifications
  • Le simple fait d'avoir un certificat SSL ne suffit pas pour sécuriser votre site
  • N'attendez pas d'être piraté pour considérer la sécurité
  • Tout simplement parce que vous redirigez vers votre fournisseur de passerelle de paiement (par rapport à la capture d'informations) - cela ne signifie pas que vous pouvez éviter la conformité PCI, vous devez toujours vous conformer
  • Soyez proactif, sûr et approfondi - vérifiez le code du module avant de l'installer, vérifiez les fichiers PHP quotidiennement, consultez les journaux, vérifiez l'accès FTP / SSH, changez régulièrement les mots de passe

Vos clients vous font une énorme confiance lorsqu'ils transmettent toutes leurs informations privées - et si vous trahissez cette confiance en n'exploitant pas une entreprise sécurisée, vous perdrez leur coutume et toute future coutume.

Les enquêtes médico-légales PCI sont incroyablement coûteuses, prennent beaucoup de temps et risquent en fin de compte de ne plus pouvoir reprendre les paiements par carte. Ne vous laissez jamais mettre dans cette position!


Obtenez patché

Récemment, une série de correctifs publiés par Magento ont corrigé des trous, y compris certains qui permettaient l'exécution de code à distance. Vous pouvez les récupérer ici, https://www.magentocommerce.com/products/downloads/magento/

Mais ces nouveaux articles ne font pas référence à un nouvel exploit, ils indiquent simplement comment les pirates exploitent les exploits historiques (ou tout autre vecteur d'attaque) pour pouvoir capturer les informations du titulaire de la carte.


Sources


4
Merci! Ceci est un résumé étonnant et beaucoup d'informations très utiles.
Piotr Kaminski

9

J'ajoute une autre réponse juste parce que mon autre n'a pas réellement répondu à la question - et elle n'a certainement pas besoin d'être plus longue!

Comment puis-je vérifier si une image contient des informations CC

En fin de compte, vous ne pouvez pas. Il y a parfois des indicateurs qui le distinguent,

Par exemple.

  • Grande taille de fichier
  • Présence de texte brut dans le fichier
  • En-têtes d'image incorrects

Mais il peut être particulièrement difficile de digérer le contenu des fichiers binaires pour déterminer le contenu si le contenu n'est pas simplement en texte brut.

L'exploit le plus courant que j'ai vu n'implique pas d'écrire des données en texte brut dans un fichier avec une .jpg|png|gif|etcextension, ils impliquent généralement une sorte de codage / cryptage pour obscurcir les données (par exemple. base64Ou mcryptetc.). Ce qui signifie qu'un simple grep ne fonctionnera pas.

Vous pourriez (et ce n'est en aucun cas exhaustif) ...

Rechercher des fichiers anormalement volumineux

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

Rechercher les fichiers correspondant à l'expression régulière 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

Vérifiez si les fichiers image sont valides

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

Ou

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

Comment puis-je vérifier les fichiers PHP dans mon installation pour voir s'ils ont été modifiés

La façon la plus simple de comparer vos fichiers d'installation serait de comparer le noyau à une copie propre. Cela ne tiendra pas compte de vos fichiers de thème, mais contribuera grandement à vérifier quelques milliers de fichiers dans votre installation.

Le processus est vraiment simple,

Par exemple. Pour Magento version 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

Gardez à l'esprit que les anciennes versions de Magento ne sont pas (ennuyeusement) corrigées, donc faire une différence de base entraînera des modifications. Pour éviter cela, appliquez les correctifs à la source propre fraîchement téléchargée, puis différez à nouveau après.


2
Compte tenu de vos deux réponses, celle-ci semble mieux correspondre à la question.
pspahn

Ben, j'ai appuyé sur Entrée avant de pouvoir terminer ma justification de la modification que j'ai suggérée ... ce n'est pas une chose importante, juste que PCI est une norme de l'industrie et non une réglementation ou une loi adoptée par un organisme gouvernemental, du moins pas aux États-Unis: en.wikipedia.org/wiki/…
Bryan 'BJ' Hoffpauir Jr.

1
J'utilisais juste la "réglementation" dans le contexte d'être interchangeable avec la "règle" (pas la loi)
Ben Lessani - Sonassi

Appréciez la distinction et elle peut être plus basée sur le lieu que je ne l'avais imaginé à l'origine. Selon mon père, l'avocat et la sœur du doyen de la faculté de droit (je déteste discuter avec eux comme vous pouvez le deviner) ici aux États-Unis, même le mot règle a une signification spécifique lorsqu'il est préfacé par un modificateur spécifique, comme la règle de l'industrie comme dans ce Case vs Agency Rule (où une agence gouvernementale comme l'EPA peut émettre des exigences détaillées qui sont juridiquement contraignantes comme une loi mais qui ne sont pas adoptées comme règlement par notre Sénat ou la Chambre des représentants des chambres du Congrès). Ne pas vouloir être pédant, juste partager :)
Bryan 'BJ' Hoffpauir Jr.

3

Excellent article, mais malheureusement, toutes les choses ne sont pas égales.

Autorisations de fichiers

Lorsque l'hébergement mutualisé est devenu populaire, il a été jugé plus important que les gens ne soient pas autorisés à afficher le contenu des autres sur le même serveur. Jusqu'à l'avènement des prisons FreeBSD, cela signifiait:

  • coquilles restreintes
  • / home en tant que root: root 700
  • Comptes d'utilisateurs avec umask 007.
  • Logiciel de changement de serveur Web UID
  • Et l'UID vers lequel il a changé est le propriétaire de ce compte.

Cela a permis la modification des fichiers HTML (alors) par le propriétaire du compte alors qu'en même temps, le processus du serveur Web et le propriétaire du compte n'avaient pas accès à d'autres sur la même machine.

Cela n'a pas beaucoup changé et les progiciels adaptés à l'hébergement partagé (CPanel, DirectAdmin, Plex) utilisent tous ces principes. Cela signifie que le point d'entrée principal (serveur Web et / ou interpréteur de script) peut écrire dans n'importe quel fichier du compte, rendant les autorisations de fichier inutiles.

Pas de CC à voler si vous ne l'avez pas

Informez votre fournisseur de paiement CC si les données CC sont réellement envoyées à votre serveur et si oui, si elles sont envoyées non cryptées non cryptées. JavaScript est assez puissant de nos jours et il existe des fournisseurs de services de paiement qui utilisent le moteur JavScript de votre client pour crypter les informations sensibles avant leur transmission au serveur. Bien qu'il soit possible pour ce rassembleur d'informations d'obtenir la clé de session ainsi que les données chiffrées (et donc de pouvoir les déchiffrer), cela est moins intéressant pour le rassembleur car les données collectées sont plus grandes et l'IA du bot beaucoup plus complexe .

Détection de modification

Plus de 15 ans d'Unix et ça me fait toujours un sourire nostalgique quand je vois des réincarnations de TripWire . Git c'est un bon outil pour cela aussi. En comparaison avec une bonne version connue, un peu moins, car elle ne prend pas en compte les ajouts et encore une fois un bon outil ici, car les modifications locales sont plus fréquentes que les installations vierges.

Le téléchargeur

Il est tout aussi facile de déplacer le téléchargeur en dehors de la racine du document que d'installer une forme d'authentification HTTP. Ensuite, ne le remettez que lorsque vous l'utilisez. Si ce n'est pas pratique, je préfère le verrouiller en fonction de l'adresse distante plutôt que d'une autre couche utilisateur / mot de passe, en particulier ceux qui envoient des mots de passe en texte brut.

WAF et alternatives

Un pare-feu d'application Web peut éviter de nombreux problèmes, déjà au stade de l'analyse d'une attaque. Malheureusement, ce sont des boîtes noires coûteuses, mais certaines alternatives existent:

  1. Celui qui était le compagnon de tripwire à l'époque - Snort - est là-haut avec des WAF commerciaux. Il a une courbe d'apprentissage abrupte, mais peut très bien détecter les anomalies et les mauvais schémas connus.
  2. Naxsi pour nginx et mod_security pour Apache refusent les requêtes contenant des signatures d'attaque connues. Naxsi est un peu plus générique et refuse le service pour "des choses qui ne devraient pas appartenir ici", comme du SQL obscurci - contrairement à une partie d'un bit connu de SQL.
  3. Fail2ban / sshguard se situe entre les deux précédents. Ils peuvent gérer différents types de journaux et avoir des actions personnalisables. L'inconvénient est qu'ils fonctionnent après coup. Les lignes de connexion atteignent généralement le journal une fois l'action terminée et, en plus, les outils ont un seuil pour lutter contre les faux positifs. Cela peut être suffisant pour que l'attaquant puisse y accéder s'il a obtenu des informations précises dans les étapes précédentes.

Je pense que nous avons couvert beaucoup de choses, mais permettez-moi de terminer avec mon petpeeve:


Cesser d'utiliser FTP


Là. Je l'ai dit. Et c'est parti: https://wiki.filezilla-project.org/Howto


1

Ce nouveau hack n'a rien de certain, Ben Marks a posté hier qu'il enquêtait sur le problème et il y a aussi cet article.

La meilleure approche que vous pouvez essayer est de vous connecter via SSH et d'effectuer une recherche dans tous les fichiers que vous avez pour une certaine chaîne, quelque chose comme

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

à partir de votre dossier racine Magento et si vous obtenez une correspondance, vérifiez manuellement le fichier pour voir ce qui se passe. Pareil avec d'autres chaînes comme "END PUBLIC KEY" par exemple.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.