Skąd mam wiedzieć, czy do przeglądania kart kredytowych używany jest uszkodzony plik obrazu?


17

Pracuję z witryną, która moim zdaniem została zhakowana w celu zebrania danych karty kredytowej klienta, ale nie jestem pewien.

I nie znaleźć żadnego podejrzanego kodu w typowych miejscach widziałem sugerowanych w kilku artykułach.

I tak znaleźć podejrzane „uszkodzony” plik obrazu w:

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

Zmieniłem rozszerzenie pliku i otworzyłem ją, ale to tylko ściana zaszyfrowanego tekstu z JPEG-1.1porozrzucanymi fragmentami .

Jak mogę sprawdzić, czy witryna została naruszona?

Potwierdziłem, że łatka została zastosowana, ale włamanie mogło nastąpić przed łatką.

EDYCJA: Dotknięta wersja to 1.7.0.2

Odpowiedzi:


21

Aby uzyskać szczegółową odpowiedź na twoje pytanie, patrz: /magento//a/72700/361

tło

Po pierwsze, nie ma żadnego konkretnego exploita - w tej chwili istnieje seria artykułów opisujących rundę, które źle odczytały i źle zrozumiały artykuł źródłowy.

W oryginalnym artykule tylko powiedziano (a ja parafrazuję):

Jeśli haker byli w stanie uzyskać dostęp do plików Magento, oni mogli przechwytywać informacje z klientem

Kluczową częścią jest fakt, że haker musi faktycznie uzyskać dostęp do serwera i zmodyfikować pliki.


Nie panikuj ... to nie jest nic specyficznego dla Magento

Pod względem przechwytywania informacji Magento nie ma nic konkretnego niż jakakolwiek inna strona internetowa / platforma. Jeśli haker uzyska dostęp do twoich plików, jego gra się skończy - będą w stanie przechwycić dowolne informacje, które chcą.

Najlepsze, co możesz zrobić (a ostatecznie minimum, jakie powinieneś zrobić), to utrzymać dobrą politykę bezpieczeństwa zgodną ze standardami bezpieczeństwa PCI w branży przetwarzania płatności, listę znajdziesz tutaj, https://www.pcisecuritystandards.org /documents/Prioritized_Approach_for_PCI_DSS_v3_.pdf


Zahartuj swój sklep

Możesz naprawdę zablokować aspekty swojego sklepu, które znacznie zmniejszają powierzchnię ataku hakera, a przynajmniej spowalniają ich postęp, jeśli uda im się dostać do /

Zablokuj uprawnienia

Możesz ograniczyć uprawnienia do katalogu głównego dokumentu, aby zezwolić tylko na zapis do niezbędnych katalogów ( /vari /media)

Tak właśnie robimy domyślnie w 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"

Dopasuj INSTALL_PATH,SSH_USER,WEB_GROUPdo koloru. Ważne jest to, że nie jesteś SSH_USERtym samym użytkownikiem, którego PHP używa do procesu serwera WWW, w przeciwnym razie zasadniczo zapewniasz pełny dostęp do zapisu na serwerze WWW (co zmniejsza wszelkie korzyści).

Zablokuj dostęp administratora / downloadera

W MageStack ustawiłbyś to ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

Na Nginx możesz tego użyć,

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

Jest nieco bardziej dokumentację, jak przygotować .htpasswdplik tutaj

Zawiń cron.shproces

Natknąłem się na innych dostawców hostingu korzystających z dedykowanych maszyn do użytku cron / admin - co oznacza, że ​​modyfikacja cron.shpliku umożliwi zdalne wykonanie kodu na cron / admin bez konieczności dostępu do niego. Podsumowanie procesu z odpowiednim użytkownikiem w fakechroocie może pójść o krok dalej, aby zablokować proces.

Nie ma zbyt dużo kodu dla mnie pisać, ale jest to skrypt tutaj . Jest specyficzny dla MageStack, ale można go dostosować do mniej eleganckich konfiguracji serwera :)

Audyt, audyt, audyt

Linux jest fantastyczny pod względem logowania i korzystania z niego, co daje pełny wgląd w to, co robi twój serwer.

Fantastyczną funkcją MageStack jest narzędzie kontrolne, które codziennie rejestruje wszystkie rodzaje dostępu, a nawet zmiany plików. Możesz znaleźć dzienniki tutaj,

/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

Jeśli nie używasz MageStack, możesz dość łatwo powielić niektóre z nich u swojego dostawcy hostingu, rsyncbędąc najprostszym narzędziem do tego.

Na przykład. Jeśli kopie zapasowe są dostępne lokalnie, możesz wykonać następujące czynności. Spowoduje to porównanie na sucho dwóch katalogów i utworzenie listy łatek różnic.

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

Zmiany w PHP są tak rzadkie, że można zaplanować ich uruchamianie codziennie (lub wiele razy dziennie) i powiadamianie przez e-mail, jeśli nastąpi zmiana pliku PHP.


W podsumowaniu

  • Użyj kontroli wersji, łatwiej jest śledzić zmiany
  • Samo posiadanie certyfikatu SSL nie wystarczy, aby Twoja strona była bezpieczna
  • Nie czekaj, aż zostaniesz zhakowany, aby rozważyć bezpieczeństwo
  • Tylko dlatego, że przekierowujesz do dostawcy bramki płatności (w przeciwieństwie do przechwytywania informacji) - nie oznacza to, że możesz uniknąć zgodności z PCI, nadal musisz przestrzegać
  • Bądź proaktywny, bezpieczny i dokładny - sprawdzaj kod modułu przed jego instalacją, codziennie sprawdzaj pliki PHP, przeglądaj dzienniki, sprawdzaj dostęp FTP / SSH, regularnie zmieniaj hasła

Twoi klienci obdarzają Cię ogromnym zaufaniem, gdy przekazują wszystkie swoje prywatne informacje - a jeśli zdradzisz to zaufanie, nie prowadząc bezpiecznej firmy, stracisz ich zwyczaj i wszelkie przyszłe zwyczaje.

Badania kryminalistyczne PCI są niezwykle drogie, czasochłonne i ostatecznie ryzykują twoją zdolność do ponownego przyjmowania płatności kartą. Nigdy nie daj się postawić w tej pozycji!


Połataj

Ostatnio wydano szereg poprawek z Magento, które naprawiły dziury, w tym niektóre, które umożliwiły zdalne wykonanie kodu. Możesz je pobrać tutaj, https://www.magentocommerce.com/products/downloads/magento/

Ale te nowe artykuły nie odnoszą się do nowego exploita, po prostu stwierdzają, w jaki sposób hakerzy wykorzystują historyczne exploity (lub inny wektor ataku), aby móc przechwycić informacje o posiadaczu karty.


Źródła


4
Dzięki! To niesamowity opis i wiele bardzo przydatnych informacji.
Piotr Kamiński

9

Dodam kolejną odpowiedź tylko dlatego, że moja inna tak naprawdę nie odpowiedziała na pytanie - i na pewno nie musi być dłużej!

Jak mogę sprawdzić, czy obraz zawiera informacje CC

Ostatecznie nie możesz. Czasami istnieją wskaźniki, które wyróżniają go,

Na przykład.

  • Duży rozmiar pliku
  • Obecność zwykłego tekstu w pliku
  • Niepoprawne nagłówki obrazu

Ale może być szczególnie trudne do strawienia zawartości plików binarnych w celu ustalenia zawartości, jeśli zawartość nie jest zwykłym tekstem.

Najczęstszym wykorzystać Widziałem nie wymaga zapisywania danych zwykły tekst w pliku z .jpg|png|gif|etcrozszerzeniem, zwykle wiązać jakieś kodowania / szyfrowania do zaciemniać dane (np. base64Lub mcryptitd.). Co oznacza, że ​​prosty grep nie zadziała.

Mógłbyś (i to wcale nie jest wyczerpujące) ...

Znajdź nienormalnie duże pliki

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

Znajdź pliki pasujące do wyrażenia regularnego 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

Sprawdź, czy pliki obrazów są prawidłowe

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

Lub

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

Jak mogę sprawdzić pliki PHP w mojej instalacji, aby zobaczyć, czy zostały zmodyfikowane?

Najłatwiejszym sposobem porównania plików instalacyjnych byłoby różnicowanie rdzenia względem czystej kopii. Nie będzie to uwzględniać plików motywów, ale znacznie zajmie sprawdzenie kilku tysięcy plików w instalacji.

Proces jest naprawdę łatwy,

Na przykład. Dla wersji 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

Pamiętaj, że starsze wersje Magento nie są (irytujące) nie załatane, więc zrobienie podstawowej różnicy spowoduje wyświetlenie zmian. Aby tego uniknąć, zastosuj łaty do świeżo pobranego czystego źródła, a następnie zrób różnicę później.


2
Biorąc pod uwagę obie odpowiedzi, ta wydaje się lepiej odnosić się do pytania.
pspahn

Ben, wcisnąłem Enter, zanim mogłem dokończyć moje uzasadnienie edycji, którą zasugerowałem ... nic ważnego, tylko to, że PCI jest standardem branżowym, a nie rozporządzeniem lub prawem uchwalonym przez organ rządowy, przynajmniej nie w USA: en.wikipedia.org/wiki/…
Bryan 'BJ' Hoffpauir Jr.

1
Po prostu użyłem „regulacji” w kontekście wymienności z „zasadą” (nie prawem)
Ben Lessani - Sonassi

Doceń to rozróżnienie, a może być bardziej oparte na lokalizacji, niż początkowo sobie wyobrażałem. Według mojego taty prawnika i siostry dziekana prawa (nie znoszę się z nimi kłócić, jak można się domyślać) tutaj, w USA, nawet słowo reguła ma określone znaczenie, gdy jest poprzedzone konkretnym modyfikatorem, takim jak Reguła Przemysłu, jak w tym przypadku sprawa przeciwko regule agencji (gdzie agencja rządowa, taka jak EPA, może wydać szczegółowe wymagania, które są prawnie wiążące jak prawo, ale nie zostały uchwalone jako rozporządzenie przez nasze izby Kongresu Senatu lub Izby Reprezentantów). Nie chcę być pedantyczny, po prostu dzielę się :)
Bryan „BJ” Hoffpauir Jr.,

3

Świetny post, ale niestety nie wszystkie rzeczy są sobie równe.

Uprawnienia do plików

Kiedy hosting dzielony stał się popularny, uznano, że ważniejsze jest, aby ludzie nie mogli oglądać treści innych na tym samym serwerze. Do czasu pojawienia się więzień FreeBSD oznaczało to:

  • ograniczone muszle
  • / home jako root: root 700
  • Konta użytkowników z umask 007.
  • Zmieniające się UID oprogramowanie serwera WWW
  • A identyfikator UID, na który się zmienił, jest właścicielem tego konta.

Umożliwiło to modyfikację (wówczas) plików HTML przez właściciela konta, a jednocześnie proces serwera WWW i właściciel konta nie mieli dostępu do innych na tym samym komputerze.

To niewiele się zmieniło i wszystkie pakiety oprogramowania dostosowane do hostingu współdzielonego (CPanel, DirectAdmin, Plex) stosują te zasady. Oznacza to, że główny punkt wejścia (serwer WWW i / lub interpreter skryptów) może zapisywać do dowolnego pliku na koncie, dzięki czemu uprawnienia do plików są bezużyteczne.

Brak CC do kradzieży, jeśli go nie masz

Poinformuj swojego dostawcę płatności CC, czy dane CC są faktycznie wysyłane na twój serwer, a jeśli tak, czy są przesyłane niezaszyfrowane niezaszyfrowane. JavaScript jest obecnie dość potężny i istnieją dostawcy usług płatniczych, którzy używają silnika JavScript klienta do szyfrowania poufnych informacji przed przesłaniem na serwer. Chociaż zbieracz informacji może uzyskać klucz sesji, a także dane zaszyfrowane (a tym samym móc je odszyfrować), zbieranie danych jest mniej interesujące, ponieważ zebrane dane są większe, a sztuczna inteligencja bota jest o wiele bardziej złożona .

Wykrywanie modyfikacji

Ponad 15 lat uniksów i wciąż wywołuje nostalgiczny uśmiech na mojej twarzy, kiedy widzę reinkarnacje TripWire . Git, to także dobre narzędzie do tego. Porównując ze znaną dobrą wersją, nieco mniej, ponieważ nie bierze ona pod uwagę dodatków i ponownie daje dobre narzędzie tutaj, ponieważ lokalne modyfikacje strony są częstsze niż nieskazitelne instalacje.

Downloader

Przeniesienie downloeadera poza katalog główny dokumentu jest równie łatwe, jak zainstalowanie jakiejś formy uwierzytelnienia HTTP. Następnie odłóż go tylko wtedy, gdy go użyjesz. Jeśli to nie jest praktyczne, wolę je zablokować na podstawie adresu zdalnego niż innej warstwy użytkownika / hasła, szczególnie tych, które wysyłają hasła w postaci zwykłego tekstu.

WAF i alternatywy

Zapora aplikacji sieciowej może zapobiec wielu problemom, już na etapie skanowania ataku. Niestety są to drogie czarne skrzynki, ale istnieją pewne alternatywy:

  1. Ten, który był towarzyszem tripwire w tamtych czasach - Snort - jest tam z komercyjnymi WAF. Ma stromą krzywą uczenia się, ale dość dobrze wykrywa anomalie i znane złe wzorce.
  2. Naxsi dla nginx i mod_security dla Apache odrzucają żądania zawierające znane sygnatury ataków. Naxsi jest nieco bardziej ogólna i odmawia usługi dla „rzeczy, które nie powinny tu należeć”, takich jak zaciemniony SQL - w przeciwieństwie do części znanego fragmentu SQL.
  3. Fail2ban / sshguard siedzi pomiędzy dwoma poprzednimi. Mogą obsługiwać różne typy dzienników i mieć dostosowane akcje. Minusem jest to, że działają po fakcie. Logline zwykle trafiają do dziennika po zakończeniu akcji, a ponadto narzędzia mają próg do zwalczania fałszywych alarmów. Może to wystarczyć, aby atakujący uzyskał dostęp, jeśli uzyskał dokładne informacje na wcześniejszych etapach.

Myślę, że omówiliśmy wiele rzeczy, ale pozwól mi zakończyć moją petpeeve:


PRZESTAŃ UŻYWAĆ FTP


Tam. Powiedziałem to. I proszę: https://wiki.filezilla-project.org/Howto


1

W tym nowym hacku nie ma nic pewnego, Ben Marks powiedział wczoraj, że badają ten problem i jest też ten artykuł.

Najlepszym rozwiązaniem, jakie możesz wypróbować, jest zalogowanie się przez SSH i przeszukanie wszystkich plików pod kątem określonego ciągu, coś w rodzaju

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

z folderu głównego Magento, a jeśli otrzymasz dopasowanie, ręcznie sprawdź plik, aby zobaczyć, co się dzieje. To samo z innymi ciągami, np. „END PUBLIC KEY”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.