Làm cách nào để biết liệu tệp hình ảnh bị hỏng đang được sử dụng để lướt qua thẻ tín dụng?


17

Tôi đang làm việc với một trang web mà tôi tin rằng đã bị hack để thu thập dữ liệu thẻ tín dụng của khách hàng, nhưng tôi không thể chắc chắn được.

Tôi không tìm thấy bất kỳ mã đáng ngờ nào ở những nơi phổ biến mà tôi thấy được đề xuất trong một số bài viết.

Tôi đã tìm thấy một tập tin hình ảnh "bị hỏng" đáng ngờ trong:

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

Tôi đã thay đổi phần mở rộng tập tin và mở cô ấy lên, nhưng đó chỉ là một bức tường văn bản được mã hóa với sự JPEG-1.1phân tán.

Làm thế nào tôi có thể biết nếu trang web bị xâm phạm?

Tôi đã xác nhận bản vá đã được áp dụng, nhưng vụ hack có thể xảy ra trước bản vá.

EDIT: Phiên bản bị ảnh hưởng là 1.7.0.2

Câu trả lời:


21

Để biết câu trả lời cụ thể cho câu hỏi của bạn, hãy xem /magento//a/72700/361

Lý lịch

Thứ nhất, không có khai thác cụ thể - có một loạt các bài báo đang thực hiện các vòng tại thời điểm đã đọc sai và hiểu sai bài viết nguồn.

Các bài viết gốc chỉ nói (và tôi diễn giải),

Nếu một hacker đã có thể để có được quyền truy cập vào các file Magento của bạn, họ có thể nắm bắt thông tin từ khách hàng của bạn

Phần quan trọng là tin tặc cần truy cập vào máy chủ của bạn và sửa đổi các tệp.


Đừng hoảng sợ ... điều này không có gì đặc biệt với Magento

Về mặt nắm bắt thông tin, không có gì cụ thể đối với Magento hơn bất kỳ trang web / nền tảng nào khác. Nếu một hacker có quyền truy cập vào các tệp của bạn, thì trò chơi của nó sẽ kết thúc - họ có thể nắm bắt bất kỳ thông tin nào họ muốn.

Điều tốt nhất bạn có thể làm (và cuối cùng, điều tối thiểu bạn nên làm) là duy trì chính sách bảo mật tốt tuân thủ Tiêu chuẩn bảo mật PCI của ngành xử lý thanh toán, bạn có thể tìm thấy danh sách tại đây, https://www.pcisecuritystiterias.org /document/P Warrioritized_Approach_for_PCI_DSS_v3_.pdf


Bảo vệ cửa hàng của bạn

Bạn thực sự có thể khóa các khía cạnh của cửa hàng của mình để giảm đáng kể khu vực tấn công bề mặt cho tin tặc, hoặc ít nhất, làm chậm tiến trình của chúng nếu chúng quản lý để vào /

Khóa quyền

Bạn có thể hạn chế quyền trên gốc tài liệu chỉ cho phép ghi vào các thư mục cần thiết ( /var/media)

Đây là những gì chúng tôi làm theo mặc định trên 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"

Điều chỉnh INSTALL_PATH,SSH_USER,WEB_GROUPcho phù hợp. Điều quan trọng là bạn SSH_USERkhông phải là cùng một người dùng mà PHP sử dụng cho quy trình máy chủ web, nếu không, về cơ bản, bạn sẽ cung cấp quyền truy cập ghi đầy đủ vào máy chủ web (giảm thiểu mọi lợi ích).

Khóa quyền truy cập quản trị viên / người tải xuống của bạn

Trên MageStack, bạn sẽ đặt cái này vào ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

Trên Nginx, bạn có thể sử dụng cái nà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 ;
}

Có thêm một chút tài liệu về cách chuẩn bị một .htpasswdtập tin ở đây

Kết thúc cron.shquá trình

Tôi đã bắt gặp các nhà cung cấp dịch vụ lưu trữ khác sử dụng các máy chuyên dụng để sử dụng cron / admin - điều đó có nghĩa là sửa đổi cron.shtệp sẽ cho phép thực thi mã từ xa trên cron / admin mà không cần phải truy cập vào nó. Kết thúc quá trình với đúng người dùng trong fakechroot có thể đi xa hơn một chút để khóa quy trình.

Có quá nhiều mã để tôi đăng, nhưng có một đoạn script ở đây . Nó đặc trưng cho MageStack, nhưng có thể được điều chỉnh để sử dụng trên các cấu hình máy chủ kém thanh lịch :)

Kiểm toán, kiểm toán, kiểm toán

Linux là tuyệt vời về đăng nhập và khai thác vào đó sẽ cung cấp cho bạn cái nhìn sâu sắc hoàn toàn về những gì máy chủ của bạn đang làm.

Một tính năng tuyệt vời trên MageStack là công cụ kiểm toán ghi lại tất cả các loại quyền truy cập và thậm chí thay đổi tệp hàng ngày. Bạn có thể tìm thấy các bản ghi ở đây,

/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

Nếu bạn không sử dụng MageStack, bạn có thể sao chép một số điều này với nhà cung cấp dịch vụ lưu trữ của riêng bạn khá dễ dàng, rsynclà công cụ đơn giản nhất để làm điều đó.

Ví dụ. Nếu bản sao lưu của bạn có sẵn tại địa phương, bạn có thể làm như sau. Điều này sẽ chạy khô so sánh hai thư mục và tạo ra một danh sách vá khác.

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

Các thay đổi PHP không thường xuyên đến mức bạn có thể lên lịch để chạy hàng ngày (hoặc nhiều lần mỗi ngày) và thông báo cho bạn qua email nếu có thay đổi tệp PHP.


Tóm tắt

  • Sử dụng kiểm soát phiên bản, dễ dàng hơn để theo dõi các thay đổi
  • Chỉ cần có chứng chỉ SSL là không đủ để làm cho trang web của bạn an toàn
  • Đừng chờ đợi để bị hack để xem xét bảo mật
  • Chỉ vì bạn chuyển hướng đến nhà cung cấp cổng thanh toán (so với việc nắm bắt thông tin) - điều đó không có nghĩa là bạn có thể tránh tuân thủ PCI, bạn vẫn cần tuân thủ
  • Hãy chủ động, an toàn và kỹ lưỡng - kiểm tra mã mô-đun trước khi cài đặt, kiểm tra tệp PHP hàng ngày, xem lại nhật ký, kiểm tra truy cập FTP / SSH, thay đổi mật khẩu thường xuyên

Khách hàng của bạn đang đặt niềm tin rất lớn vào bạn khi họ chuyển qua tất cả thông tin cá nhân của họ - và nếu bạn phản bội lòng tin đó bằng cách không điều hành một doanh nghiệp an toàn, bạn sẽ mất tùy chỉnh và tất cả các tùy chỉnh trong tương lai.

Điều tra pháp y PCI rất tốn kém, mất thời gian và cuối cùng có nguy cơ khả năng bạn có thể thực hiện thanh toán thẻ một lần nữa. Đừng bao giờ để mình bị đặt vào vị trí đó!


Được vá

Gần đây có một loạt các bản vá được phát hành từ Magento đã sửa các lỗ hổng, bao gồm một số bản vá được phép thực thi mã từ xa. Bạn có thể tìm nạp chúng tại đây, https: //www.magentoc Commerce.com/products/doads/magento/

Nhưng những bài viết mới này không đề cập đến một khai thác mới, họ chỉ đơn giản chỉ ra cách tin tặc tận dụng các khai thác lịch sử (hoặc bất kỳ vectơ tấn công nào khác) để có thể nắm bắt thông tin chủ thẻ.


Nguồn


4
Cảm ơn! Đây là bài viết tuyệt vời và rất nhiều thông tin rất hữu ích.
Piotr Kaminski

9

Tôi đang thêm một câu trả lời khác chỉ vì câu hỏi khác của tôi không thực sự trả lời câu hỏi - và chắc chắn nó không còn cần thiết nữa!

Làm cách nào để xác minh nếu hình ảnh chứa thông tin CC

Cuối cùng, bạn không thể. Đôi khi có những chỉ số làm cho nó nổi bật,

Ví dụ.

  • Kích thước tệp lớn
  • Sự hiện diện của văn bản đơn giản trong tập tin
  • Tiêu đề hình ảnh không chính xác

Nhưng có thể đặc biệt khó tiêu hóa nội dung của tệp nhị phân để xác định nội dung nếu nội dung không chỉ đơn thuần là văn bản thuần túy.

Phổ biến nhất khai thác tôi đã nhìn thấy không liên quan đến ghi dữ liệu văn bản đơn giản vào một tập tin với một .jpg|png|gif|etcphần mở rộng, họ thường liên quan đến một số loại mã hóa / mã hóa để xáo trộn các dữ liệu (ví dụ. base64Hoặc mcryptvv). Điều đó có nghĩa là một grep đơn giản sẽ không hoạt động.

Bạn có thể (và điều này không có nghĩa là toàn diện) ...

Tìm tập tin lớn bất thường

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

Tìm tập tin phù hợp với 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

Kiểm tra xem tập tin hình ảnh có hợp lệ không

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

Hoặc là

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

Làm cách nào tôi có thể kiểm tra các tệp PHP trong bản cài đặt của mình để xem nó đã được sửa đổi chưa

Cách dễ nhất để so sánh các tệp cài đặt của bạn là phân biệt lõi so với bản sao sạch. Điều này sẽ không giải thích cho các tệp chủ đề của bạn, nhưng sẽ đi một chặng đường dài để kiểm tra một vài nghìn tệp trong cài đặt của bạn.

Quá trình này thực sự dễ dàng,

Ví dụ. Đối với phiên bản 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

Hãy nhớ rằng các bản phát hành Magento cũ hơn (khó chịu) không được vá, do đó, làm khác biệt cốt lõi sẽ dẫn đến những thay đổi được hiển thị. Để tránh điều này, hãy áp dụng các bản vá cho nguồn sạch mới tải xuống, sau đó tìm lại sau.


2
Đưa ra cả hai câu trả lời của bạn, câu hỏi này dường như liên quan tốt hơn đến câu hỏi.
pspahn

Ben, tôi nhấn enter trước khi tôi có thể hoàn thành lời biện minh cho bản chỉnh sửa mà tôi đề nghị ... không phải là vấn đề chính, chỉ là PCI là một tiêu chuẩn công nghiệp và không phải là một quy định hoặc luật được thông qua bởi một cơ quan chính phủ, ít nhất là không ở Mỹ: vi.wikipedia.org/wiki/ từ
Bryan 'BJ' Hoffpauir Jr.

1
Tôi chỉ sử dụng "quy định" trong bối cảnh có thể hoán đổi với "quy tắc" (không phải luật)
Ben Lessani - Sonassi

Đánh giá cao sự khác biệt và nó có thể dựa trên miền địa phương nhiều hơn tôi nhận ra ban đầu. Theo cha tôi, luật sư và chị gái trưởng khoa luật (tôi ghét tranh luận với họ như bạn có thể đoán) ở Mỹ, ngay cả quy tắc từ này cũng có nghĩa cụ thể khi được sửa đổi bởi một công cụ sửa đổi cụ thể, chẳng hạn như Quy tắc Công nghiệp như thế này trường hợp so với Quy tắc của Cơ quan (trong đó một cơ quan chính phủ như EPA có thể đưa ra các yêu cầu chi tiết ràng buộc về mặt pháp lý như luật nhưng không được thông qua theo quy định của các phòng trong Thượng viện hoặc Hạ viện của chúng tôi). Đừng có ý định phạm tội, chỉ chia sẻ :)
Bryan 'BJ' Hoffpauir Jr.

3

Bài đăng tuyệt vời, nhưng tiếc là không phải tất cả mọi thứ đều được tạo ra như nhau.

Quyền truy cập tệp

Khi lưu trữ chia sẻ trở nên phổ biến, điều quan trọng hơn là mọi người không được phép xem nội dung của những người khác trên cùng một máy chủ. Cho đến khi nhà tù FreeBSD ra đời, điều này có nghĩa là:

  • vỏ bị hạn chế
  • / nhà là root: root 700
  • Tài khoản người dùng có um 007.
  • Phần mềm máy chủ web thay đổi UID
  • Và UID mà nó đổi thành, là chủ sở hữu của tài khoản đó.

Điều này cho phép sửa đổi các tệp HTML (sau đó) của chủ tài khoản đồng thời, cả quy trình máy chủ web và chủ tài khoản không có quyền truy cập vào các máy khác trên cùng một máy.

Điều này đã không thay đổi nhiều và các gói phần mềm phù hợp với lưu trữ chia sẻ (CPanel, DirectAdmin, Plex) đều sử dụng các nguyên tắc đó. Điều này có nghĩa là điểm chính của mục nhập (máy chủ web và / hoặc trình thông dịch tập lệnh) có thể ghi vào bất kỳ tệp nào trong tài khoản, làm cho quyền của tệp trở nên vô dụng.

Không có CC để đánh cắp nếu bạn không có nó

Thông báo cho nhà cung cấp dịch vụ thanh toán CC của bạn nếu dữ liệu CC thực sự được gửi đến máy chủ của bạn và nếu vậy, nếu nó được gửi không được mã hóa không được mã hóa. JavaScript khá mạnh vào những ngày này và có Nhà cung cấp dịch vụ thanh toán ngoài kia, sử dụng công cụ JavScript của khách hàng của bạn để mã hóa thông tin nhạy cảm trước khi truyền đến máy chủ. Mặc dù người thu thập thông tin này có thể lấy khóa phiên cũng như dữ liệu được mã hóa (và do đó có thể giải mã nó), nhưng điều đó không thú vị với người thu thập vì dữ liệu được thu thập lớn hơn và AI của bot phức tạp hơn rất nhiều .

Phát hiện sửa đổi

Hơn 15 năm unix và nó vẫn nở một nụ cười hoài cổ trên khuôn mặt tôi khi tôi nhìn thấy những tái sinh của TripWire . Git nó sa công cụ tốt cho việc này quá. So sánh với một phiên bản tốt đã biết, có phần ít hơn, vì nó không tính đến các bổ sung và một lần nữa git một công cụ tốt ở đây, vì các sửa đổi cục bộ thường xuyên hơn sau đó cài đặt nguyên sơ.

Trình tải xuống

Thật dễ dàng để di chuyển trình xuống dưới bên ngoài gốc tài liệu cũng như cài đặt một số dạng xác thực HTTP. Sau đó chỉ đặt lại khi bạn sử dụng nó. Nếu điều đó không thực tế, thì tôi thích khóa nó dựa trên địa chỉ từ xa hơn là một lớp người dùng / mật khẩu khác, đặc biệt là những lớp gửi mật khẩu bằng văn bản thuần túy.

WAF và các lựa chọn thay thế

Tường lửa ứng dụng Web có thể ngăn chặn rất nhiều vấn đề, đã ở giai đoạn quét của một cuộc tấn công. Thật không may, đây là những hộp đen đắt tiền, nhưng một số lựa chọn thay thế tồn tại:

  1. Người bạn đồng hành của tripwire ngày trước - Snort - ngay tại đó với WAF thương mại. Nó có một đường cong học tập dốc, nhưng có thể phát hiện ra sự bất thường và những cái xấu được biết đến khá tốt.
  2. Naxsi cho nginx và mod_security cho các yêu cầu từ chối Apache có chứa chữ ký tấn công. Naxsi có chung chung hơn một chút và từ chối dịch vụ cho "những thứ không thuộc về nơi này", như SQL bị che khuất - trái ngược với một phần của một chút SQL đã biết.
  3. Fail2ban / sshguard ngồi ở giữa hai cái trước. Họ có thể xử lý các loại nhật ký khác nhau và có hành động tùy chỉnh. Nhược điểm là họ làm việc sau khi thực tế. Các biểu đồ thường đánh vào nhật ký sau khi một hành động đã được hoàn thành và trên hết là các công cụ có ngưỡng để chống lại các lỗi tích cực. Điều này có thể đủ để kẻ tấn công có được quyền truy cập, nếu nó có được thông tin chính xác trong các giai đoạn trước.

Tôi nghĩ rằng chúng tôi đã bao gồm rất nhiều thứ nhưng hãy để tôi kết thúc với petpeeve của tôi:


DỪNG SỬ DỤNG FTP


Đó Tôi nói rồi. Và ở đây ya đi: https://wiki.filezilla-project.org/Howto


1

Không có gì chắc chắn về Hack mới này là, Bến Marks hôm qua gửi họ đang điều tra vấn đề này và có này bài viết quá.

Cách tiếp cận tốt nhất bạn có thể thử là đăng nhập qua SSH và thực hiện tìm kiếm bên trong tất cả các tệp bạn có cho một chuỗi nhất định, đại loại như

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

từ thư mục gốc Magento của bạn và nếu bạn nhận được một trận đấu, hãy thủ công xem tệp để xem điều gì đang xảy ra. Tương tự với các chuỗi khác như "END PUBLIC KEY" chẳng hạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.