Como posso saber se um arquivo de imagem corrompido está sendo usado para escanear cartões de crédito?

17

Estou trabalhando com um site que acredito ter sido invadido para coletar dados de cartão de crédito de clientes, mas não tenho certeza.

Eu não encontrar qualquer código suspeito nos lugares comuns que eu vi sugeridas em vários artigos.

I fez encontrar um arquivo de imagem suspeito "quebrado" em:

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

Mudei a extensão do arquivo e a abri, mas é apenas uma parede de texto criptografado JPEG-1.1espalhado.

Como posso saber se o site está comprometido?

Confirmei que o patch foi aplicado, mas o hack pode ter ocorrido antes do patch.

EDIT: A versão afetada é 1.7.0.2

travisw
fonte

Respostas:

21

Para obter a resposta específica à sua pergunta, consulte /magento//a/72700/361

fundo

Em primeiro lugar, não há exploração específica - há uma série de artigos em andamento no momento que interpretaram mal e entenderam mal o artigo de origem.

O artigo original apenas dizia (e estou parafraseando),

Se um hacker foram capazes de obter acesso a seus arquivos Magento, eles poderiam capturar informações de seu cliente

A parte principal é o hacker que realmente precisa acessar seu servidor e modificar arquivos.


Não entre em pânico ... isso não é nada específico do Magento

Em termos de captura de informações, não há nada específico para Magento do que qualquer outro site / plataforma. Se um hacker obtém acesso aos seus arquivos, seu jogo acaba efetivamente - ele poderá capturar qualquer informação que deseje.

O melhor que você pode fazer (e, finalmente, o mínimo que deve fazer) é manter uma boa política de segurança que atenda aos padrões de segurança PCI do setor de processamento de pagamentos. Você pode encontrar a lista aqui, https://www.pcisecuritystandards.org /documents/Prioritized_Approach_for_PCI_DSS_v3_.pdf


Endurecer sua loja

Você pode realmente bloquear facetas da sua loja que reduzem bastante a área de ataque de superfície de um hacker ou, pelo menos, retardam o progresso se conseguirem entrar /

Bloquear permissões

Você pode restringir permissões na raiz do documento para permitir apenas a gravação em diretórios essenciais ( /vare /media)

É o que fazemos por padrão no 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"

Ajuste INSTALL_PATH,SSH_USER,WEB_GROUPpara se adequar. O que é importante é que você SSH_USERnão é o mesmo usuário que o PHP usa para o processo do servidor da Web; caso contrário, você essencialmente forneceria acesso total de gravação ao servidor da Web (atenuando quaisquer benefícios).

Bloqueie seu acesso de administrador / downloader

No MageStack, você configuraria isso em ___general/x.conf

set $magestack_protect_admin true;
set $magestack_protect_downloader true;

No Nginx, você pode usar isso,

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

Há um pouco mais de documentação sobre como preparar um .htpasswdarquivo aqui

Envolva o cron.shprocesso

Encontrei outros provedores de hospedagem usando máquinas dedicadas para uso do cron / admin - o que significa que a modificação do cron.sharquivo permitiria a execução remota de código no cron / admin sem precisar acessar. Encerrar o processo com o usuário certo em um fakechroot pode ir um pouco mais além para bloquear o processo.

Há muito código para eu postar, mas há um script aqui . É específico para o MageStack, mas pode ser ajustado para uso em configurações de servidor menos elegantes :)

Auditoria, auditoria, auditoria

O Linux é fantástico em termos de registro e acesso, oferecendo uma visão completa do que seu servidor está fazendo.

Um recurso fantástico no MageStack é a ferramenta de auditoria que registra todos os tipos de acesso e até alterações de arquivos diariamente. Você pode encontrar os logs aqui,

/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

Se você não estiver usando o MageStack, poderá replicar parte disso com seu próprio provedor de hospedagem com bastante facilidade, rsyncsendo a ferramenta mais simples para fazer isso.

Por exemplo. Se seus backups estiverem disponíveis localmente, você poderá fazer o seguinte. Isso fará a comparação a seco de dois diretórios e produzirá uma lista de patches 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

As mudanças no PHP são tão raras que você pode agendar isso para ser executado diariamente (ou várias vezes ao dia) e notificá-lo por e-mail se houver uma alteração no arquivo PHP.


Em suma

  • Use o controle de versão, é mais fácil rastrear alterações
  • Apenas ter um certificado SSL não é suficiente para tornar seu site seguro
  • Não espere ser hackeado para considerar a segurança
  • Só porque você redireciona para seu provedor de gateway de pagamento (versus captura de informações) - isso não significa que você pode evitar a conformidade com PCI, você ainda precisa
  • Seja proativo, seguro e completo - verifique o código do módulo antes de instalá-lo, verifique os arquivos PHP diariamente, revise os logs, verifique o acesso FTP / SSH, altere as senhas regularmente

Seus clientes depositam uma enorme confiança em você quando repassam todas as suas informações privadas - e se você trair essa confiança ao não operar uma empresa segura, perderá o costume e todo o futuro.

As investigações forenses da PCI são incrivelmente caras, demoradas e acabam arriscando sua capacidade de receber pagamentos com cartão novamente. Nunca se deixe nessa posição!


Receba atualizações

Ultimamente, havia uma série de patches lançados pelo Magento que corrigiam buracos, incluindo alguns que permitiam a execução remota de código. Você pode buscá-los aqui, https://www.magentocommerce.com/products/downloads/magento/

Mas esses novos artigos não estão se referindo a uma nova exploração, eles estão simplesmente declarando como os hackers estão aproveitando as explorações históricas (ou qualquer outro vetor de ataque) para poder capturar informações do titular do cartão.


Fontes

Ben Lessani - Sonassi
fonte
4
Obrigado! Este é um artigo incrível e muitas informações muito úteis.
Piotr Kaminski
9

Estou adicionando outra resposta apenas porque a minha outra não respondeu à pergunta - e certamente não precisa ser mais!

Como posso verificar se uma imagem contém informações sobre CC

Em última análise, você não pode. Às vezes, existem indicadores que o destacam,

Por exemplo.

  • Tamanho de arquivo grande
  • Presença de texto sem formatação no arquivo
  • Cabeçalhos de imagem incorretos

Mas pode ser particularmente difícil digerir o conteúdo dos arquivos binários para determinar o conteúdo se o conteúdo não estiver apenas em texto simples.

A exploração mais comum que eu vi não envolve a gravação de dados de texto sem formatação em um arquivo com uma .jpg|png|gif|etcextensão, eles geralmente envolvem algum tipo de codificação / criptografia para ofuscar os dados (por exemplo, base64ou mcryptetc.). O que significa que um grep simples não funcionará.

Você poderia (e isso não é de forma alguma exaustivo) ...

Encontre arquivos anormalmente grandes

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

Localizar arquivos correspondentes ao 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

Verifique se os arquivos de imagem são válidos

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'

Como posso verificar os arquivos PHP na minha instalação para ver se foram modificados

A maneira mais fácil de comparar seus arquivos de instalação seria diferenciar o núcleo de uma cópia limpa. Isso não leva em conta os arquivos do tema, mas ajuda bastante na verificação de alguns milhares de arquivos na sua instalação.

O processo é realmente fácil,

Por exemplo. Para Magento versão 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

Lembre-se de que as versões mais antigas do Magento não são corrigidas (irritantemente), portanto, fazer um diff principal resultará em alterações. Para evitar isso, aplique os patches na fonte limpa recém-baixada e difira novamente depois.

Ben Lessani - Sonassi
fonte
2
Dadas as duas respostas, esta parece se relacionar melhor com a pergunta.
pspahn
Ben, apertei enter antes que eu pudesse terminar minha justificativa para a edição que sugeri ... não é uma coisa importante, apenas que o PCI é um padrão da indústria e não uma regra ou lei aprovada por um órgão governamental, pelo menos não nos EUA: en.wikipedia.org/wiki/…
Bryan 'BJ' Hoffpauir Jr.
1
Eu só estava usando "regulação" no contexto de ser intercambiável com "regra" (não a lei)
Ben Lessani - Sonassi
Aprecie a distinção e ela pode ser mais baseada na localidade do que eu percebi originalmente. De acordo com meu pai, o advogado e a irmã, o reitor da faculdade de direito (eu odeio discutir com eles como você pode imaginar) aqui nos EUA, mesmo a palavra regra tem um significado específico quando precedida por um modificador específico, como Industry Rule, como neste case versus Rule Rule (onde uma agência governamental como a EPA pode emitir requisitos detalhados que são juridicamente vinculativos como uma lei, mas que não são aprovados como regulamento por nossas câmaras do Senado ou da Câmara dos Deputados). Não quero ser pedante, apenas compartilhando :)
Bryan 'BJ' Hoffpauir Jr.
3

Ótimo post, mas infelizmente nem todas as coisas são criadas da mesma forma.

Permissões de arquivo

Quando a hospedagem compartilhada se tornou popular, foi considerado mais importante que as pessoas não pudessem exibir o conteúdo de outras pessoas no mesmo servidor. Até o advento das cadeias do FreeBSD, isso significava:

  • conchas restritas
  • / home como root: root 700
  • Contas de usuário com umask 007.
  • UID mudando o software do servidor da web
  • E o UID para o qual foi alterado é o proprietário dessa conta.

Isso permitiu a modificação dos arquivos (então) HTML pelo proprietário da conta e, ao mesmo tempo, o processo do servidor da web e o proprietário da conta não tiveram acesso a outras pessoas na mesma máquina.

Isso não mudou muito e os pacotes de software adaptados à hospedagem compartilhada (CPanel, DirectAdmin, Plex) usam esses princípios. Isso significa que o principal ponto de entrada (servidor da web e / ou interpretador de scripts) pode gravar em qualquer arquivo da conta, tornando inúteis as permissões de arquivo.

Nenhum CC para roubar se você não o tiver

Informe com o seu provedor de pagamento de CC se os dados do CC são realmente enviados para o servidor e, em caso afirmativo, se são enviados não criptografados, não criptografados. Atualmente, o JavaScript é bastante poderoso e existem fornecedores de serviços de pagamento por aí que usam o mecanismo JavScript do seu cliente para criptografar informações confidenciais antes da transmissão ao servidor. Embora possa ser possível para esse coletor de informações obter a chave da sessão e os dados criptografados (e, assim, poder descriptografá-los), é menos interessante para o coletor, pois os dados coletados são maiores e a IA do bot muito mais complexa .

Detecção de modificação

Mais de 15 anos de unix e ainda põe um sorriso nostálgico no meu rosto quando vejo reencarnações do TripWire . Git é uma boa ferramenta para isso também. Comparando com uma versão boa conhecida, um pouco menos, pois ela não leva em consideração as adições e, novamente, fornece uma boa ferramenta aqui, pois as modificações no site local são mais frequentes do que as instalações originais.

O Downloader

É tão fácil mover o downloeader para fora da raiz do documento quanto instalar alguma forma de autenticação HTTP. Em seguida, coloque-o novamente quando você o usar. Se isso não for prático, prefiro bloqueá-lo com base no endereço remoto e não em outra camada de usuário / senha, especialmente aquelas que enviam senhas em texto sem formatação.

WAF e alternativas

Um firewall de aplicativo da Web pode evitar muitos problemas, já no estágio de verificação de um ataque. Infelizmente, essas são caixas pretas caras, mas existem algumas alternativas:

  1. Aquele que era o companheiro da tripwire naquela época - Snort - está lá em cima com WAFs comerciais. Ele tem uma curva de aprendizado acentuada, mas pode detectar anomalias e padrões mal conhecidos.
  2. O Naxsi para nginx e o mod_security para Apache negam solicitações que contêm assinaturas de ataque conhecidas. Naxsi é um pouco mais genérico e nega serviço para "coisas que não deveriam pertencer aqui", como SQL obscurecido - em contraste com parte de um pouco conhecido de SQL.
  3. Fail2ban / sshguard fica entre os dois anteriores. Eles podem lidar com diferentes tipos de logs e ter ações personalizáveis. A desvantagem é que eles trabalham após o fato. As linhas de log normalmente atingem o log após a conclusão de uma ação e, além disso, as ferramentas têm um limite para combater falsos positivos. Isso pode ser suficiente para o invasor obter acesso, se tiver obtido informações precisas nos estágios anteriores.

Acho que cobrimos muitas coisas, mas deixe-me terminar com a minha petpeeve:


PARAR DE USAR FTP


Lá. Eu disse isso. E aqui está: https://wiki.filezilla-project.org/Howto

Melvyn
fonte
1

Não há nada certo sobre esse novo hack, Ben Marks postou ontem que está investigando o problema e também existe este artigo.

A melhor abordagem que você pode tentar é fazer login via SSH e fazer uma pesquisa dentro de todos os arquivos que você possui para uma determinada string, algo como

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

da pasta raiz do Magento e, se você conseguir uma correspondência, verifique manualmente o arquivo para ver o que está acontecendo. O mesmo acontece com outras strings como "END PUBLIC KEY", por exemplo.

mbalparda
fonte