Proteção de Banco de Dados MySQL

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Pessoal, me aconteceu uma coisa estranha recentemente: um técnico de informática não autorizado acessou meu banco de dados em um provedor (Kinghost), sem a senha.
Ele acessou a rede pelo notebook dele, sendo que uma das máquinas da rede tinha meu sistema instalado, incluindo o Maria DB. Ele usou algum aplicativo no notebook dele (não sei qual é, pois eu não estava presente, só tenho a informação do usuário dessa máquina) para capturar os dados do banco de dados.
Eu gostaria de entender como ele pode ter feito isso.
E, sobretudo, gostaria de saber como posso proteger meu banco de dados desse tipo de ataque.
Alguém me ajuda?
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Proteção de Banco de Dados MySQL

Mensagem por alxsts »

Olá!

Baseado no teu relato, é difícil opinar. Provavelmente alguma brecha foi deixada durante o desenvolvimento. Eu apostaria em SQL Injection...
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

A senha do banco de dados está salva no PRG do meu sistema. Os computadores dos usuários não têm os PRGs. Mas claro que, se está no PRG, também está no EXE.
Mas, até onde sei, o técnico não examinou o EXE. Ele simplesmente acessou o computador do usuário pela rede, por meio do notebook dele, e fez uma cópia integral do banco de dados do provedor.
Do relatório elaborado pelo próprio técnico, consta o seguinte: "Por essa razão, a verificação foi realizada no computador de
patrimônio X e serial Y, utilizado pela servidora ..., através do
monitoramento da comunicação realizada entre o dispositivo e o servidor que hospeda os
dados durante a inicialização do programa tlprocesso" com seu login. Assim, foi possível utilizar
a conexão aberta pela aplicação para realizar a exportação dos dados e gerar um arquivo para
posterior análise conforme descrito abaixo:"
Queria entender como ele conseguiu fazer esse monitoramento da comunicação, e como faço para evitar que isso ocorra novamente.
Inacio de Carvalho Neto
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Proteção de Banco de Dados MySQL

Mensagem por Vlademiro »

Pelo que eu entendi, o técnico monitorou a comunicação pela rede. Existem programas, como p wireshark que capturam pacotes na rede. Ele descobriu que o seu exe estava abrindo a porta 3306 e ele monitorou os pacote correspondentes. O que me deixa intrigado é que esses pacotes deviam estar criptografados. Como vc faz para conectar ao banco ? Poderia postar o trecho que faz isso ?

Se os pacotes trafegam descriptografados fica difícil ajudar. Nesse caso, vc poderia pelo menos dificultar o invasor, limitando os IPs que podem acessar o banco.

O link a seguir pode lhe ajudar

https://mariadb.com/kb/en/configuring-m ... mote-hosts
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Proteção de Banco de Dados MySQL

Mensagem por ANDRIL »

Possivelmente seu site deva ser acessado via https, então apostaria em algum programa de monitoramento de pacotes de rede Wi-Fi. Talvez a criptografia do roteador esteja setada mais fraca ou até mesmo sem facilitando a leitura pela rede Wi-Fi.
Outra possibilidade é o técnico ter tido acesso fácil aos dados de conexão que estejam com o usuário ou em algum arquivo.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Acesso o banco de dados desta forma:

Código: Selecionar todos

FUNCTION conectado(nProvedor)
         LOCAL cnConnection
         LOCAL nPort :=" "
         LOCAL nVersion :=3
         LOCAL cServer :="mysql.xxx.com.br"
         LOCAL cDatabase :="xxx"
         LOCAL cUser :="xxx"
         LOCAL cPassword :="xxx"
         private nVzexq :=0
   
   
   #define AD_USE_CLIENT                    3

   hb_Default( @nPort, 3306 )
   hb_Default( @nVersion, 3 )
   
   do while .t.
      ODBC_MARIADB=Mariadb_StringConexao()

      cnConnection:= win_OleCreateObject( "ADODB.Connection" )
         cnConnection:ConnectionString := ODBC_MARIADB + ";Server=" + cServer + ";" + "Port=" + Ltrim( Str( nPort ) ) + ;
         ";Stmt=;Database=" + cDatabase + ";User=" + cUser + ";Password=" + cPassword + ";Collation=latin1;" + ;
         "AUTO_RECONNECT=1;COMPRESSED_PROTO=0;PAD_SPACE=1" // usando compactaΒo impede certas checagens // Option=131072;
      cnConnection:CursorLocation    := AD_USE_CLIENT
      cnConnection:CommandTimeOut    := 300 // seconds
      cnConnection:ConnectionTimeOut := 300 // seconds

      if cnConnection:State#0
	     exit
	  else
	     nVzexq++
		 if nVzexq>2
		    ?"Não conectou"
			inkey(5)
			return 999
	     endif
	  endif
exit	  
   enddo
RETURN cnConnection

Criptografado? Eu não sei fazer isto.

Os usuários não têm os dados de conexão, nem há arquivos nos computadores dos usuários com esses dados, apenas o .exe.
Inacio de Carvalho Neto
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Proteção de Banco de Dados MySQL

Mensagem por Vlademiro »

Não sou especialista no assunto, mas pelo que entendi dos links que pesquisei :

(1) O mysql/mariadb vem com ssl desabilitado, logo o tráfego pode ser monitorado

Para saber se o suporte a ssl no seu servidor está ativo faça :

Código: Selecionar todos

SHOW VARIABLES LIKE '%ssl%';
Repare na linha : "have_ssl"

(2) Para ativar o suporte encontrei esse link.

https://www.alibabacloud.com/blog/how-t ... ion_595079


O suporte a ssl é uma característica do servidor, basicamente não há nada que a sua aplicação possa fazer, já que teoricamente o ODBC faz o trabalho de enviar e receber. Já que o seu mariadb está em um provedor, creio que é melhor entrar em contato com o provedor. Note que na documentação que enviei tem uma etapa para a geração de chaves ssl. Não entendo bem essa parte, mas creio que o seu provedor deve lhe informar algo a respeito.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Proteção de Banco de Dados MySQL

Mensagem por Vlademiro »

Uma curiosidade interessante: a configuração do ssl no PostgreSQL me pareceu bem mais fácil a primeira vista:

https://www.percona.com/blog/enabling-a ... nnections/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Fiz a pesquisa do ssl no servidor, veja no anexo.
Mas, salvo erro meu, o MariaDB está instalado nas máquinas dos usuários. Então, não é no servidor, correto? Ou mesmo assim eu teria que configurar no servidor?
Anexos
ssl.png
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Dentro da rede, ele pode até interceptar a conexão.
Eu quero saber se fora da rede ele consegue.
Interceptar por exemplo a conexão da empresa com o provedor do SGBD.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Não sei se ele tentou fazer fora da rede.
Mas a questão é: tem como impedir que faça essa interceptação, dentro ou fora da rede?
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Dentro da rede ele já FUROU o PRINCIPAL BLOQUEIO.
Quero ver da casa dele por exemplo ele acessar o seu BD esteja onde estiver.
O resto é monitorar portas. Se tiver criptografado o tráfego é bem difícil. Tem que ver isso no SGBD, parece que vc usa MariaDB/MySQL. Veja nas configurações se está ativa a criptografia. Mas se ele tem acesso a sua rede ele já está dentro, talvez ele acessou a maquina local e está inventando... Não sei, tenho que ler muita coisa a esse respeito para saber como fazer, seria mais fácil perguntar para ele como fez... Se ficar com segredinho é pq não fez nada de mais. Assim eu penso.
Ele pode ter EDITADO O .EXE e viu o login/senha.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Possivelmente seu site deva ser acessado via https,
Uma pequena correção HTTPS não é usado por banco de dados. HTTP é usando entre o Apache/IIS/Etc e o NAVEGADOR Edger/Chrome/Firefox... Banco de dados usa o TCP/IP.
HTTP e HTTPS e FTP e DHCP roda em cima do TCP. Sem HTTP, sem FTP, sem DHCP vc consegue comunicação com Mysql/MariaDb por exemplo até o LetoDBf roda. SMB é outro protocolo da M$ mais FURADO que queijo suíço, serve para compartilhar impressoras, pastas etc.

https://www.gta.ufrj.br/grad/03_1/ip-se ... ducao.html

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Olá!
Dentro da rede ele já FUROU o PRINCIPAL BLOQUEIO.
Quero ver da casa dele por exemplo ele acessar o seu BD esteja onde estiver.
O resto é monitorar portas. Se tiver criptografado o tráfego é bem difícil. Tem que ver isso no SGBD, parece que vc usa MariaDB/MySQL. Veja nas configurações se está ativa a criptografia. Mas se ele tem acesso a sua rede ele já está dentro, talvez ele acessou a maquina local e está inventando... Não sei, tenho que ler muita coisa a esse respeito para saber como fazer, seria mais fácil perguntar para ele como fez... Se ficar com segredinho é pq não fez nada de mais. Assim eu penso.
Ele pode ter EDITADO O .EXE e viu o login/senha.
Eu não estava no local na hora, mas, pelo que o usuário me contou, parece que ele não editou o .EXE não. E com certeza ele não mexeu na máquina do usuário, só acessou pela rede.

Como faço para ver se está ativa a criptografia?

Não tenho como perguntar pra ele como fez. Não é questão de segredinho. Apenas não tenho acesso a ele, nem sei quem é.
Será que entendi direito"
Eu não te entendi. Falei alguma besteira?
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Como faço para ver se está ativa a criptografia?
Pesquisar na internet.
Se não me falha a memória o Vladimir postou.
Lembre-se é seu banco de dados, e aprender essa parte é o básico do básico.
Primeira coisa é perguntar ao provedor se já está criptografado a transmissão.
Não confundir criptografia de dados(strings) com criptografia dos PACOTES DA COMUNICAÇÃO.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder