Wie kann ich feststellen, ob eine beschädigte Bilddatei zum Überfliegen von Kreditkarten verwendet wird?

17

Ich arbeite mit einer Website, von der ich glaube, dass sie gehackt wurde, um Kreditkartendaten von Kunden zu sammeln, aber ich kann nicht sicher sein.

Ich habe keinen verdächtigen Code an den üblichen Stellen gefunden, die ich in mehreren Artikeln vorgeschlagen habe.

Ich habe eine verdächtige "kaputte" Bilddatei gefunden in:

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

Ich habe die Dateierweiterung geändert und sie geöffnet, aber es ist nur eine Wand aus verschlüsseltem Text mit JPEG-1.1verstreuten Informationen.

Wie kann ich feststellen, ob die Website kompromittiert ist?

Ich habe bestätigt, dass der Patch angewendet wurde, aber der Hack könnte vor dem Patch aufgetreten sein.

BEARBEITEN: Betroffene Version ist 1.7.0.2

Travisw
quelle

Antworten:

21

Die genaue Antwort auf Ihre Frage finden Sie unter /magento//a/72700/361

Hintergrund

Erstens gibt es keinen spezifischen Exploit - es gibt eine Reihe von Artikeln, die im Moment die Runde machen und die den Quellartikel falsch verstanden haben.

Der ursprüngliche Artikel sagte nur (und ich umschreibe),

Wenn ein Hacker war die Lage Zugriff auf Ihre Magento - Dateien zu erhalten, sie könnten Informationen von Ihrem Kunden erfassen

Der wichtigste Teil ist der Hacker, der tatsächlich auf Ihren Server zugreifen und Dateien ändern muss.


Keine Panik ... das ist nichts Besonderes für Magento

In Bezug auf die Erfassung von Informationen gibt es für Magento nichts Spezielles als jede andere Website / Plattform. Wenn ein Hacker Zugriff auf Ihre Dateien erhält, ist das Spiel praktisch vorbei - er kann alle gewünschten Informationen erfassen.

Das Beste, was Sie tun können (und letztendlich das Minimum, das Sie tun sollten), ist die Einhaltung einer guten Sicherheitsrichtlinie, die den PCI-Sicherheitsstandards der Zahlungsverkehrsbranche entspricht. Die Liste finden Sie hier: https://www.pcisecuritystandards.org /documents/Prioritized_Approach_for_PCI_DSS_v3_.pdf


Härten Sie Ihren Laden

Sie können Facetten Ihres Geschäfts wirklich sperren, die die Angriffsfläche für einen Hacker erheblich verringern, oder zumindest deren Fortschritt verlangsamen, wenn er es schafft, in das Geschäft zu gelangen.

Berechtigungen sperren

Sie können die Berechtigungen für den Dokumentstamm einschränken, um nur das Schreiben in wichtige Verzeichnisse ( /varund /media) zuzulassen.

Dies ist, was wir standardmäßig auf MageStack tun ,

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"

Anpassen INSTALL_PATH,SSH_USER,WEB_GROUP, um zu passen. Wichtig ist, dass Sie SSH_USERnicht derselbe Benutzer sind, den PHP für den Webserver-Prozess verwendet. Andernfalls würden Sie im Wesentlichen vollständigen Schreibzugriff auf den Webserver gewähren (um die Vorteile zu verringern).

Sperren Sie Ihren Administrator- / Downloader-Zugang

Auf MageStack würden Sie dies einstellen ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

Auf Nginx könnten Sie dies verwenden,

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

Es ist ein bisschen mehr Dokumentation, wie eine Vorbereitung .htpasswdDatei hier

Wickeln Sie den cron.shProzess

Ich bin auf andere Hosting-Anbieter gestoßen, die dedizierte Computer für die Verwendung von Cron / Admin verwendet haben. Das bedeutet, dass das Ändern der cron.shDatei eine Remotecodeausführung auf Cron / Admin ermöglicht, ohne jemals darauf zugreifen zu müssen. Wenn Sie den Prozess mit dem richtigen Benutzer in eine falsche Wurzel packen, können Sie den Prozess noch weiter blockieren.

Es gibt viel zu viel Code für mich zu schreiben, aber es gibt ein Skript hier . Es ist spezifisch für MageStack, kann aber für weniger elegante Serverkonfigurationen angepasst werden :)

Prüfung, Prüfung, Prüfung

Linux ist fantastisch in Bezug auf die Anmeldung und das Eingeben, sodass Sie einen vollständigen Einblick in die Funktionsweise Ihres Servers erhalten.

Eine fantastische Funktion von MageStack ist das Auditing-Tool, das täglich alle Arten von Zugriffen und sogar Dateiänderungen protokolliert. Die Protokolle finden Sie hier,

/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

Wenn Sie MageStack nicht verwenden, können Sie einen Teil davon ganz einfach mit Ihrem eigenen Hosting-Anbieter replizieren. Dies rsyncist das einfachste Tool, um dies zu tun.

Z.B. Wenn Ihre Backups lokal verfügbar sind, können Sie Folgendes tun. Dadurch werden zwei Verzeichnisse im Probelauf verglichen und eine Diff-Patch-Liste erstellt.

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-Änderungen sind so selten, dass Sie dies so planen können, dass es täglich (oder mehrmals täglich) ausgeführt wird und Sie per E-Mail benachrichtigt werden, wenn sich eine PHP-Datei ändert.


in Summe

  • Verwenden Sie die Versionskontrolle, um Änderungen leichter verfolgen zu können
  • Nur ein SSL-Zertifikat zu haben, reicht nicht aus, um Ihre Site sicher zu machen
  • Warten Sie nicht, bis Sie gehackt werden, um über Sicherheit nachzudenken
  • Nur weil Sie zu Ihrem Zahlungsgateway-Anbieter weiterleiten (im Gegensatz zum Erfassen von Informationen), bedeutet dies nicht, dass Sie die PCI-Konformität vermeiden können
  • Seien Sie proaktiv, sicher und gründlich - prüfen Sie den Modulcode vor der Installation, prüfen Sie die PHP-Dateien täglich, überprüfen Sie die Protokolle, prüfen Sie den FTP / SSH-Zugriff, ändern Sie die Kennwörter regelmäßig

Ihre Kunden setzen enormes Vertrauen in Sie, wenn sie alle ihre privaten Informationen weitergeben - und wenn Sie dieses Vertrauen verraten, indem Sie kein sicheres Geschäft betreiben, verlieren Sie Ihre Gewohnheiten und alle zukünftigen Gewohnheiten.

Forensische PCI-Untersuchungen sind unglaublich teuer, zeitaufwändig und riskieren letztendlich, dass Sie jemals wieder Kartenzahlungen annehmen können. Lass dich niemals in diese Position bringen!


Lass dich patchen

In letzter Zeit gab es eine Reihe von Patches von Magento, die Lücken geschlossen haben, darunter auch einige, die die Ausführung von Remote-Code ermöglichten. Sie können sie hier abrufen : https://www.magentocommerce.com/products/downloads/magento/

Diese neuen Artikel beziehen sich jedoch nicht auf einen neuen Exploit, sondern beschreiben lediglich, wie Hacker historische Exploits (oder andere Angriffsmethoden) nutzen, um Karteninhaberinformationen zu erfassen.


Quellen

Ben Lessani - Sonassi
quelle
4
Vielen Dank! Dies ist eine erstaunliche Zusammenfassung und eine Menge sehr nützlicher Informationen.
Piotr Kaminski
9

Ich füge eine weitere Antwort hinzu, nur weil meine andere die Frage nicht wirklich beantwortet hat - und es muss sicher nicht mehr länger sein!

Wie kann ich überprüfen, ob ein Bild CC-Informationen enthält?

Letztendlich kannst du nicht. Es gibt manchmal Indikatoren, die es abheben,

Z.B.

  • Große Dateigröße
  • Vorhandensein von Klartext in der Datei
  • Falsche Bildüberschriften

Es kann jedoch besonders schwierig sein, den Inhalt von Binärdateien zu verdauen, um den Inhalt zu bestimmen, wenn der Inhalt nicht nur im Klartext vorliegt.

Der häufigste Exploit, den ich gesehen habe, besteht darin, keine Klartextdaten in eine Datei mit einer .jpg|png|gif|etcErweiterung zu schreiben. In der Regel handelt es sich um eine Art Codierung / Verschlüsselung, um die Daten zu verschleiern (z. B. base64oder mcryptusw.). Was bedeutet, dass ein einfaches Grep nicht funktioniert.

Sie könnten (und das ist keineswegs erschöpfend) ...

Finden Sie ungewöhnlich große Dateien

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

Finden Sie Dateien, die mit CC regex übereinstimmen

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

Überprüfen Sie, ob die Bilddateien gültig sind

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

Oder

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

Wie kann ich die PHP-Dateien in meiner Installation überprüfen, um festzustellen, ob sie geändert wurden?

Der einfachste Weg, Ihre Installationsdateien zu vergleichen, besteht darin, den Kern mit einer sauberen Kopie zu vergleichen. Dies wird Ihre Designdateien nicht berücksichtigen, reicht jedoch weit aus, um einige tausend Dateien in Ihrer Installation zu überprüfen.

Der Prozess ist wirklich einfach,

Z.B. Für 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

Bedenken Sie, dass ältere Magento-Versionen (ärgerlicherweise) nicht gepatcht sind. Wenn Sie also einen Core Diff verwenden, werden Änderungen angezeigt. Um dies zu vermeiden, wenden Sie die Patches auf die frisch heruntergeladene saubere Quelle an und unterscheiden Sie sie anschließend erneut.

Ben Lessani - Sonassi
quelle
2
In Anbetracht Ihrer beiden Antworten scheint diese Frage besser zu beantworten zu sein.
pspahn
Ben, ich drücke die Eingabetaste, bevor ich meine Rechtfertigung für die von mir vorgeschlagene Änderung abschließen kann ... keine große Sache, nur, dass PCI ein Industriestandard ist und keine Vorschrift oder ein Gesetz, das von einer Regierungsbehörde verabschiedet wurde, zumindest nicht in den USA: en.wikipedia.org/wiki/…
Bryan 'BJ' Hoffpauir Jr.
1
Ich habe "Regulation" nur verwendet, um mit "Rule" (nicht dem Gesetz) austauschbar zu sein
Ben Lessani - Sonassi
Schätzen Sie den Unterschied und es kann mehr auf Gebietsschema basieren, als ich ursprünglich realisiert habe. Meinem Vater zufolge haben der Anwalt und die Schwester des Dekans der juristischen Fakultät (ich hasse es, mit ihnen zu streiten, wie Sie vielleicht vermuten) hier in den USA sogar die Wortregel eine bestimmte Bedeutung, wenn sie von einem bestimmten Modifikator eingeleitet wird, wie z case vs Agency Rule (wenn eine Regierungsbehörde wie die EPA detaillierte Anforderungen erlassen kann, die rechtsverbindlich sind wie ein Gesetz, aber nicht von unseren Kammern des Senats oder des Repräsentantenhauses als Verordnung verabschiedet wurden). Ich will nicht pedantisch sein, nur teilen :)
Bryan 'BJ' Hoffpauir Jr.
3

Toller Beitrag, aber leider sind nicht alle Dinge gleich angelegt.

Dateiberechtigungen

Als Shared Hosting populär wurde, wurde es als wichtiger erachtet, dass Personen nicht berechtigt waren, Inhalte anderer auf demselben Server anzuzeigen. Bis zum Aufkommen von FreeBSD-Jails bedeutete dies:

  • eingeschränkte Muscheln
  • / home als root: root 700
  • Benutzerkonten bei umask 007.
  • UID wechselnde Webserver Software
  • Und die UID, in die sie geändert wurde, ist der Besitzer dieses Kontos.

Dies ermöglichte die Änderung der (damaligen) HTML-Dateien durch den Kontoinhaber, während gleichzeitig sowohl der Webserver-Prozess als auch der Kontoinhaber keinen Zugriff auf andere auf demselben Computer hatten.

Daran hat sich nicht viel geändert, und Softwarepakete, die auf Shared Hosting (CPanel, DirectAdmin, Plex) zugeschnitten sind, verwenden alle diese Prinzipien. Dies bedeutet, dass der Haupteinstiegspunkt (Webserver und / oder Skriptinterpreter) in jede Datei im Konto schreiben kann, wodurch Dateiberechtigungen unbrauchbar werden.

Kein CC zu stehlen, wenn Sie es nicht haben

Informieren Sie Ihren CC-Zahlungsanbieter, ob die CC-Daten tatsächlich an Ihren Server gesendet werden, und wenn ja, ob sie unverschlüsselt gesendet werden. Heutzutage ist JavaScript ziemlich leistungsfähig, und es gibt Zahlungsdienstleister, die die JavScript-Engine Ihres Kunden verwenden, um vertrauliche Informationen vor der Übertragung an den Server zu verschlüsseln. Während es für diesen Informationssammler möglich sein mag, den Sitzungsschlüssel sowie die verschlüsselten Daten abzurufen (und somit zu entschlüsseln), ist dies für den Sammler weniger interessant, da die gesammelten Daten größer und die KI des Bots viel komplexer sind .

Änderungserkennung

Über 15 Jahre Unix und es zaubert immer noch ein nostalgisches Lächeln auf mein Gesicht, wenn ich die Reinkarnationen von TripWire sehe . Es ist auch ein gutes Werkzeug dafür. Im Vergleich zu einer bekannten guten Version etwas weniger, da hier keine Ergänzungen berücksichtigt werden und wieder ein gutes Werkzeug verwendet wird, da ortsbezogene Änderungen häufiger sind als makellose Installationen.

Der Downloader

Es ist genauso einfach, den Download-Ordner aus dem Dokumentenstamm zu verschieben wie eine Art HTTP-Authentifizierung zu installieren. Setzen Sie es dann erst wieder ein, wenn Sie es benutzen. Wenn das nicht praktikabel ist, sperre ich es lieber auf der Basis einer entfernten Adresse als auf einer anderen Benutzer- / Kennwortebene, insbesondere auf der Basis von Kennwörtern, die im Klartext gesendet werden.

WAF und Alternativen

Eine Webanwendungsfirewall kann viele Probleme verhindern, die sich bereits in der Scanphase eines Angriffs befinden. Leider handelt es sich hierbei um teure Blackboxes, es gibt jedoch einige Alternativen:

  1. Derjenige, der damals der Begleiter von Tripwire war - Snort - ist genau dort oben mit kommerziellen WAFs. Es hat eine steile Lernkurve, kann aber Anomalien und bekannte schlechte Muster recht gut erkennen.
  2. Naxsi für nginx und mod_security für Apache lehnen Anfragen ab, die bekannte Angriffssignaturen enthalten. Naxsi ist etwas allgemeiner und verweigert den Service für "Dinge, die hier nicht hingehören", wie verdecktes SQL - im Gegensatz zu einem Teil eines bekannten Teils von SQL.
  3. Fail2ban / sshguard sitzen zwischen den beiden vorherigen. Sie können mit verschiedenen Arten von Protokollen umgehen und haben anpassbare Aktionen. Der Nachteil ist, dass sie nachträglich funktionieren. Protokollzeilen treffen in der Regel nach Abschluss einer Aktion auf das Protokoll. Darüber hinaus verfügen die Tools über einen Schwellenwert für die Bekämpfung von Fehlalarmen. Dies kann ausreichen, damit der Angreifer Zugriff erhält, wenn er in früheren Phasen genaue Informationen erhalten hat.

Ich denke, wir haben eine Menge abgedeckt, aber lassen Sie mich mit meinem Petpeeve enden:


Beenden Sie die Verwendung von FTP


Dort. Ich sagte es. Und hier geht's: https://wiki.filezilla-project.org/Howto

Melvyn
quelle
1

An diesem neuen Hack ist nichts sicher, Ben Marks hat gestern geschrieben, dass sie das Problem untersuchen, und es gibt auch diesen Artikel.

Der beste Ansatz, den Sie versuchen können, besteht darin, sich über SSH anzumelden und in allen Dateien nach einer bestimmten Zeichenfolge zu suchen

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

Überprüfen Sie die Datei in Ihrem Magento-Stammordner manuell, um zu sehen, was gerade passiert, wenn Sie eine Übereinstimmung erhalten. Dasselbe gilt für andere Zeichenfolgen wie beispielsweise "END PUBLIC KEY".

mbalparda
quelle