Segurança de aplicações Java (Evitar replicações)  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
tmoretto
Debugger
[Avatar]

Membro desde: 08/05/2006 19:04:52
Mensagens: 56
Localização: Big Field
Offline

Olá colegas,

Tenho uma aplicação que precisa ter alguns recursos de segurança extras. É o seguinte, a aplicação não pode ser replicada, ou seja, de alguma forma preciso dificultar a replicação do software, que deve funcionar após uma ativação.

Esta aplicação, no caso é para celulares, utilizando J2ME, porém, estou colocando neste fórum pois não se trata de algo muito ligado ao J2ME.

O caso é o seguinte, o usuário no caso instala o software no aparelho, e digita um serial único para ativar o binário junto ao um servidor de ativação. A grande questão, que esta abordagem ainda gera umas dúvidas em relação à segurança. A idéia geral é que cada binário tenha um serial, gerado e colocado direto no seu código fonte. A pergunta, nesta abordagem é a seguinte, existe a possibilidade, e qual a dificuldade dela, de algum usuário mal intencionado que conheça bem java consiga pegar o software, extrair o serial, instalar em outro aparelho e ativá-lo? Ou seja, crackear mesmo.

Eu, se fosse mal intencionado, utilizada um Java Decompiler. (Mesmo o programa ter sido "obfuscado" pelo Proguard, daria para retirar a string do serial, certo?).

Alguem, vendo este caso, acha que apesar desta abordagem ser insegura, é viável? Alguem tem outras alternativas? Colocar um humano no processo de ativação poderia ajudar a tentar detectar fraudes?

No meu cenário, eu tenho um servidor que será o servidor de ativação para ajudar, só será ativado perante uma consulta. E no caso do J2ME, não posso pegar nem o IMEI, nem o ID do SIMCard para diferenciar aparelhos, imagine um cenário com o mínimo de informação possível.

O meu problema é que NÃO pode ter replicações. Não se trata de um Jogo ou coisa qualquer que algumas replicações causem apenas um pequeno prejuízo.
[MSN]
aleck
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline

1 - Distribua binários únicos apenas aos usuários que ligarem para se cadastrar, contendo algum tipo de identificação.

2 - Com isto, todos os usuários que utilizarem o sistema serão identificados

3 - Mantenha no servidor algum algoritmo de bloqueio, pois se algum usuário conectar 2x será bloqueado.

4 - Mantenha algum bloqueio a nível de aplicação, a aplicação deve verificar se o software já foi registrado no servidor antes de ser utilizada inicialmente.

Qualquer outra forma de segurança vai ser quebrada facilmente.

[]'s


Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli
[WWW] [MSN]
tmoretto
Debugger
[Avatar]

Membro desde: 08/05/2006 19:04:52
Mensagens: 56
Localização: Big Field
Offline

aleck wrote:1 - Distribua binários únicos apenas aos usuários que ligarem para se cadastrar, contendo algum tipo de identificação.


É exatamente o caso que tentei explicar, os usuários serão identificados, o problema é alguém replicar e utilizar o sistema como se fosse este mesmo usuário em benefício próprio, prejudicando o usuário real, dando um prejuízo financeiro ao usuário real (meu problema causa isto...).

aleck wrote:

2 - Com isto, todos os usuários que utilizarem o sistema serão identificados



Sim, serão identificados, mas cai no mesmo problema. Sabemos que serão identificados, mas isso não quer dizer que é a mesma pessoa.

aleck wrote:

3 - Mantenha no servidor algum algoritmo de bloqueio, pois se algum usuário conectar 2x será bloqueado.



É sim, isso é verdade, só pode ser ativado uma vez. O problema é o cara replicar o software já ativado, ou seja, o software não conseguir identificar se esta sendo executado pela primeira vez, já que o "cracker" pode replicar a base de dados junto. Com o J2ME não tenho um "registro" que fica no sistema operacional ou algo mais que me ajude. Imagine um cenário bem desfavorável.

Copiar o RMS do aparelho para outro é algo muito dificil, porém possível. O cracker terá que conhecer muito bem o sistema de arquivos de ambos aparelhos e como tudo funciona. É algo muito dificil, mas não improvável.
Se fosse improvável, eu não teria problemas, nem teria utilizado este fórum para levantar questões de segurança. =)

aleck wrote:

4 - Mantenha algum bloqueio a nível de aplicação, a aplicação deve verificar se o software já foi registrado no servidor antes de ser utilizada inicialmente.



aleck wrote:
Mesmo problema que citei anteriormente.

Qualquer outra forma de segurança vai ser quebrada facilmente.

[]'s



aleck, Muito obrigado, você levantou questões muitos importantes, vai me ajudar a pensar em vários recursos de segurança. Estou testando a possibilidade de utilizar criptografia simétrica em algum lugar. Isto já será utilizado na comunicação entre o servidor e o cliente.

A utilização do software é o seguinte, não expliquei no inicio no post, uma vez ativado, o usuário utilizará o programa em que as ações serão feitas conectadas em um servidor, ocorrendo uma troca de dados. Ou seja, nao é um jogo que você ativa e utiliza off-line. O sistema é todo online.

O binário será assinado digitalmente, mas isto não resolve meu problema.

Tem, o J2ME, pacotes opcionais que me ajudariam muito, mas neste caso, o software só pode utilizar as bibliotecas 'standard', MIDP e CLDC, nada mais.
[MSN]
aleck
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline

A possibilidade de criptografia é algo que pode realmente dificultar, porém não impede alguém realmente interessado em quebrar o sistema.

Recomendo que o usuário seja informado de cada transação que ele mesmo fizer via SMS, instruindo o mesmo a entrar em contato caso ele não tenha feito.

Com isto vocês tem como cancelar a operação ou algo do gênero sem causar prejuizo ao usuário.

Uma coisa que aprendi é que não podemos confiar apenas nos sistemas para garantir a segurança, os processos devem andar em paralelo.

[]'s



Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli
[WWW] [MSN]
RaulCrash
Entusiasta Java
[Avatar]

Membro desde: 13/04/2010 08:57:59
Mensagens: 24
Localização: Rondonópolis - MT
Offline

Olá amigos .. sou novo nisso e gostaria de saber se a a assinatura digital dos jar's com uma quantidade de dias ajuda a proteger minha aplicação após o limite de uso dias .. e se funciona certin .. tipo .. o cara pode atrazar a data do pc e não vai adianta nada quando o certificado expirar .. falo isso pois ja ouvi essa possibilidade ..
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team