Bagaimana saya bisa tahu jika file gambar rusak sedang digunakan untuk membaca kartu kredit?

17

Saya bekerja dengan sebuah situs yang saya percaya telah diretas untuk mengumpulkan data kartu kredit pelanggan, tetapi saya tidak bisa memastikan.

Saya tidak menemukan kode yang mencurigakan di tempat-tempat umum yang saya lihat disarankan di beberapa artikel.

Saya melakukan menemukan mencurigakan "rusak" file gambar di:

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

Saya mengubah ekstensi file dan membukanya, tetapi itu hanya dinding teks terenkripsi dengan JPEG-1.1 berserakan.

Bagaimana saya bisa tahu jika situs itu disusupi?

Saya telah mengkonfirmasi tambalan telah diterapkan, tetapi peretasan bisa terjadi sebelum tambalan.

EDIT: Versi yang terpengaruh adalah 1.7.0.2

travisw
sumber

Jawaban:

21

Untuk jawaban spesifik untuk pertanyaan Anda, lihat, /magento//a/72700/361

Latar Belakang

Pertama, tidak ada eksploit khusus - ada serangkaian artikel melakukan putaran pada saat yang telah salah membaca dan salah paham artikel sumber.

The artikel asli hanya mengatakan (dan saya parafrase),

Jika seorang hacker yang bisa mendapatkan akses ke file Magento Anda, mereka bisa menangkap informasi dari pelanggan Anda

Bagian kuncinya adalah peretas yang perlu mengakses server Anda dan memodifikasi file.


Jangan panik ... ini bukan khusus untuk Magento

Dalam hal pengambilan informasi, tidak ada yang spesifik untuk Magento daripada situs web / platform lainnya. Jika seorang peretas mendapatkan akses ke file Anda, itu akan berakhir dengan efektif - mereka akan dapat menangkap informasi apa pun yang mereka inginkan.

Yang terbaik yang dapat Anda lakukan (dan akhirnya, minimum yang harus Anda lakukan) adalah mempertahankan kebijakan keamanan yang baik yang mematuhi Standar Keamanan PCI industri pemrosesan pembayaran, Anda dapat menemukan daftarnya di sini, https://www.pcisecuritystandards.org /documents/Prioritized_Approach_for_PCI_DSS_v3_.pdf


Perketat toko Anda

Anda benar-benar dapat mengunci sisi-sisi toko Anda yang sangat mengurangi area serangan permukaan bagi seorang peretas, atau paling tidak, memperlambat kemajuan mereka jika mereka berhasil masuk /

Kunci izin

Anda dapat membatasi izin pada root dokumen untuk hanya mengizinkan penulisan ke direktori penting ( /vardan /media)

Inilah yang kami lakukan secara default di 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"

Sesuaikan INSTALL_PATH,SSH_USER,WEB_GROUPsesuai. Yang penting itu milikmuSSH_USER bukan pengguna yang sama dengan yang digunakan PHP untuk proses server web, jika tidak, Anda pada dasarnya akan memberikan akses tulis penuh ke server web (mengurangi segala manfaat).

Kunci akses admin / pengunduh Anda

Di MageStack, Anda akan mengatur ini ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

Di Nginx, Anda bisa menggunakan ini,

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

Ada sedikit dokumentasi tentang cara menyiapkan .htpasswdfile di sini

Bungkus cron.shprosesnya

Saya telah menemukan penyedia hosting lain menggunakan mesin khusus untuk penggunaan cron / admin - yang berarti memodifikasi cron.shfile akan memungkinkan untuk eksekusi kode jarak jauh pada cron / admin tanpa perlu mengaksesnya. Mengakhiri proses dengan pengguna yang tepat dalam fakechroot bisa sedikit lebih jauh untuk mengunci proses.

Ada terlalu banyak kode untuk saya kirim, tetapi ada skrip di sini . Ini khusus untuk MageStack, tetapi dapat disesuaikan untuk digunakan pada konfigurasi server yang kurang elegan :)

Audit, audit, audit

Linux luar biasa dalam hal masuk dan memanfaatkan yang akan memberi Anda wawasan lengkap tentang apa yang sedang dilakukan server Anda.

Fitur fantastis di MageStack adalah alat audit yang mencatat semua jenis akses dan bahkan mengajukan perubahan setiap hari. Anda dapat menemukan log di sini,

/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

Jika Anda tidak menggunakan MageStack, Anda dapat mereplikasi beberapa ini dengan penyedia hosting Anda sendiri dengan mudah, rsyncmenjadi alat paling sederhana untuk melakukannya.

Misalnya. Jika cadangan tersedia secara lokal, Anda dapat melakukan hal berikut. Ini akan mengeringkan membandingkan dua direktori dan menghasilkan daftar patch yang berbeda.

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

Perubahan PHP sangat jarang sehingga Anda dapat menjadwalkan ini untuk dijalankan setiap hari (atau beberapa kali sehari) dan memberi tahu Anda melalui email jika ada perubahan file PHP.


Singkatnya

  • Gunakan kontrol versi, lebih mudah untuk melacak perubahan
  • Memiliki sertifikat SSL saja tidak cukup untuk membuat situs Anda aman
  • Jangan menunggu untuk diretas untuk mempertimbangkan keamanan
  • Hanya karena Anda mengarahkan ulang ke penyedia gateway pembayaran Anda (vs. mengambil informasi) - itu tidak berarti Anda dapat menghindari kepatuhan PCI, Anda masih harus mematuhi
  • Jadilah proaktif, aman dan teliti - periksa kode modul sebelum Anda menginstalnya, periksa file PHP setiap hari, periksa log, periksa akses FTP / SSH, ubah kata sandi secara teratur

Pelanggan Anda menaruh kepercayaan yang sangat besar kepada Anda ketika mereka menyerahkan semua informasi pribadi mereka - dan jika Anda mengkhianati kepercayaan itu dengan tidak mengoperasikan bisnis yang aman, Anda akan kehilangan kebiasaan dan semua kebiasaan di masa depan.

Investigasi forensik PCI sangat mahal, memakan waktu dan akhirnya berisiko kemampuan Anda untuk dapat menerima pembayaran kartu lagi. Jangan pernah membiarkan diri Anda berada di posisi itu!


Dapatkan ditambal

Ada serangkaian tambalan yang dirilis dari Magento akhir-akhir ini yang memperbaiki lubang, termasuk beberapa yang memungkinkan untuk eksekusi kode jarak jauh. Anda dapat mengambilnya di sini, https://www.magentocommerce.com/products/downloads/magento/

Tetapi artikel-artikel baru ini tidak mengacu pada eksploitasi baru, mereka hanya menyatakan bagaimana peretas memanfaatkan eksploitasi historis (atau vektor serangan lainnya) untuk dapat menangkap informasi pemegang kartu.


Sumber

Ben Lessani - Sonassi
sumber
4
Terima kasih! Ini adalah penulisan yang luar biasa dan banyak informasi yang sangat berguna.
Piotr Kaminski
9

Saya menambahkan jawaban lain hanya karena jawaban saya yang lain tidak benar-benar menjawab pertanyaan - dan tentu saja tidak perlu lagi!

Bagaimana saya bisa memverifikasi jika suatu gambar berisi informasi CC

Pada akhirnya, Anda tidak bisa. Terkadang ada indikator yang membuatnya menonjol,

Misalnya.

  • Ukuran file besar
  • Kehadiran teks biasa dalam file
  • Header gambar salah

Tetapi bisa sangat sulit untuk mencerna isi file biner untuk menentukan konten jika konten tidak hanya dalam teks biasa.

Eksploitasi yang paling umum yang saya lihat tidak melibatkan penulisan data teks biasa ke file dengan .jpg|png|gif|etcekstensi, mereka biasanya melibatkan beberapa jenis pengkodean / enkripsi untuk mengaburkan data (mis. base64Atau mcryptlain - lain). Yang berarti grep sederhana tidak akan berfungsi.

Anda bisa (dan ini sama sekali tidak lengkap) ...

Temukan file besar yang tidak normal

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

Temukan file yang cocok dengan CC regex

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

Periksa apakah file gambar valid

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

Atau

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

Bagaimana saya dapat memeriksa file PHP di instalasi saya untuk melihat apakah sudah dimodifikasi

Cara termudah untuk membandingkan file instal Anda adalah dengan membandingkan inti dengan salinan yang bersih. Ini tidak akan menjelaskan file tema Anda, tetapi perlu memeriksa beberapa ribu file di instalasi Anda.

Prosesnya sangat mudah,

Misalnya. Untuk Magento versi 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

Ingatlah bahwa rilis Magento yang lebih lama (tidak mengganggu) tidak ditambal, jadi melakukan perbedaan inti akan menghasilkan perubahan yang ditampilkan. Untuk menghindari hal ini, terapkan tambalan ke sumber bersih yang baru diunduh, lalu perbaiki lagi setelahnya.

Ben Lessani - Sonassi
sumber
2
Mengingat kedua jawaban Anda, jawaban ini tampaknya lebih cocok dengan pertanyaan.
pspahn
Ben, saya menekan enter sebelum saya bisa menyelesaikan pembenaran saya untuk pengeditan yang saya sarankan ... bukan hal utama, hanya PCI yang merupakan standar industri dan bukan peraturan atau undang-undang yang disahkan oleh badan pemerintah, setidaknya tidak di AS: en.wikipedia.org/wiki/…
Bryan 'BJ' Hoffpauir Jr
1
Saya hanya menggunakan "regulasi" dalam konteks bisa dipertukarkan dengan "aturan" (bukan hukum)
Ben Lessani - Sonassi
Hargai perbedaan itu dan mungkin lebih didasarkan pada lokal daripada yang saya sadari sebelumnya. Menurut ayah saya pengacara dan saudari dekan sekolah hukum (saya benci berdebat dengan mereka seperti yang Anda duga) di sini di AS bahkan kata aturan memiliki arti khusus ketika diawali oleh pengubah tertentu, seperti Aturan Industri seperti dalam hal ini case vs Agency Rule (di mana lembaga pemerintah seperti EPA dapat mengeluarkan persyaratan terperinci yang mengikat secara hukum seperti hukum tetapi tidak disahkan sebagai peraturan oleh Senat atau kamar Kongres di Dewan Perwakilan Rakyat). Jangan bermaksud bertele-tele, hanya berbagi :)
Bryan 'BJ' Hoffpauir Jr.
3

Pos yang bagus, tapi sayangnya tidak semua hal diciptakan sama.

Izin file

Ketika shared hosting menjadi populer, itu dianggap lebih penting bahwa orang tidak diperbolehkan untuk melihat konten orang lain di server yang sama. Sampai munculnya penjara FreeBSD, ini berarti:

  • cangkang terbatas
  • / home as root: root 700
  • Akun pengguna dengan umask 007.
  • UID mengubah perangkat lunak server web
  • Dan UID yang diubah menjadi, adalah pemilik akun itu.

Ini memungkinkan modifikasi (kemudian) file HTML oleh pemilik akun sementara pada saat yang sama, baik proses server web dan pemilik akun tidak memiliki akses ke orang lain di mesin yang sama.

Ini tidak banyak berubah dan paket perangkat lunak yang disesuaikan dengan shared hosting (CPanel, DirectAdmin, Plex) semuanya menggunakan prinsip-prinsip tersebut. Ini berarti bahwa titik masuk utama (server web dan / atau penerjemah skrip) dapat menulis ke file apa pun di akun, membuat izin file tidak berguna.

Tidak ada CC untuk dicuri jika Anda tidak memilikinya

Informasikan dengan penyedia pembayaran CC Anda jika data CC benar-benar dikirim ke server Anda dan jika demikian, jika itu dikirim tidak terenkripsi tidak terenkripsi. JavaScript cukup kuat akhir-akhir ini dan ada Penyedia Layanan Pembayaran di luar sana, yang menggunakan mesin JavScript pelanggan Anda untuk mengenkripsi informasi sensitif sebelum dikirim ke server. Meskipun pengumpul informasi ini dimungkinkan untuk mendapatkan kunci sesi serta data terenkripsi (dan dengan demikian dapat mendekripsi), pengumpul informasi kurang menarik karena data yang dikumpulkan lebih besar dan AI bot jauh lebih kompleks. .

Deteksi modifikasi

Lebih dari 15 tahun bersatu dan masih memberikan senyum nostalgia di wajah saya ketika saya melihat reinkarnasi dari Alabire . Git itu alat yang bagus untuk ini juga. Dibandingkan dengan versi yang dikenal baik, agak kurang, karena tidak memperhitungkan penambahan dan kembali mendapat alat yang bagus di sini, karena modifikasi situs-lokal lebih sering daripada instalasi asli.

Pengunduh

Memindahkan downloeader di luar root dokumen sama mudahnya dengan menginstal beberapa bentuk otentikasi HTTP. Maka kembalikan saja ketika Anda menggunakannya. Jika itu tidak praktis, maka saya lebih suka menguncinya berdasarkan alamat jarak jauh daripada lapisan pengguna / kata sandi lainnya, terutama yang mengirim kata sandi dalam teks biasa.

WAF dan alternatifnya

Firewall Aplikasi Web dapat mencegah banyak masalah, sudah dalam tahap pemindaian serangan. Sayangnya, ini adalah kotak hitam yang mahal, tetapi ada beberapa alternatif:

  1. Orang yang merupakan teman tripwire pada hari itu - Snort - ada di atas sana bersama WAF komersial. Ini memiliki kurva belajar yang curam, tetapi dapat mendeteksi anomali dan patters yang dikenal buruk.
  2. Naxsi untuk nginx dan mod_security untuk Apache menolak permintaan yang mengandung tanda tangan serangan tahu. Naxsi sedikit lebih umum dan menolak layanan untuk "hal-hal yang seharusnya tidak ada di sini", seperti SQL yang dikaburkan - berbeda dengan bagian dari sedikit SQL yang dikenal.
  3. Fail2ban / sshguard duduk di antara dua sebelumnya. Mereka dapat menangani berbagai jenis log dan memiliki tindakan yang dapat disesuaikan. The downside adalah bahwa mereka bekerja setelah fakta. Loglines biasanya mengenai log setelah tindakan telah selesai dan di atas itu alat memiliki ambang untuk memerangi positif palsu. Ini bisa cukup bagi penyerang untuk mendapatkan akses, jika memperoleh informasi yang akurat pada tahap sebelumnya.

Saya pikir kami membahas banyak hal tetapi biarkan saya akhiri dengan hewan peliharaan saya:


BERHENTI MENGGUNAKAN FTP


Sana. Saya mengatakannya. Dan ini dia: https://wiki.filezilla-project.org/Howto

Melvyn
sumber
1

Tidak ada yang pasti tentang peretasan baru ini, Ben Marks kemarin diposting mereka sedang menyelidiki masalah ini dan ada artikel ini juga.

Pendekatan terbaik yang dapat Anda coba adalah masuk melalui SSH dan melakukan pencarian di dalam semua file yang Anda miliki untuk string tertentu, sesuatu seperti

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

dari folder root Magento Anda dan jika Anda mendapatkan kecocokan, heck file secara manual untuk melihat apa yang terjadi. Sama dengan string lainnya seperti "END PUBLIC KEY" misalnya.

mbalparda
sumber