Eu tava lendo um post do cv que terminava com essa deixa…
Os usuários do UOL receberam um alerta essa semana contra o vírus Bugbear, que está pegando muitas máquinas por aí, inclusive empresas. Ouvi boatos sobre “115 países com empresas do setor financeiro” terem pego, etc, etc.
A JVM prevê um isolamento das aplicações em um sandbox, e bloqueios de segurança com permissões, evitando que código remoto (applet, webstart, ou uma app que vc baixe e rode) tenha acesso “demais” na sua máquina.
Mas se vc tiver aspectos, por exemplo, ou capacidade de modificar o bytecode em runtime (que o JDistro, o Echidna e vários outros progs fazem), vc pode passar por cima de muitas “garantias” previsas durante a criação das especificações.
A pergunta é: o que vcs acham mais importante, que os programas Java sejam poderosos, capazes de fazer maravilhas, ou seguros, de modo que possamos confiar sempre neles?
tiago, ja mostraram que com aspectagem ou qualquer manipulador de bytecode como o jmangler e o bcel, voce quebra seguranca de QUALQUER software em java, mas nao quebra nada que foi loadado pelo bootstrap classloader, que eh a restricao basica do java.
mas realmente eh uma boa questao. mas o java ta muito bem sem dar permissoes grotescas pra todo mundo neh? e se voce quer fazer besteira, eh soh mexer nos pilicies
Quando vc roda uma app em webstart, ela pode requerer permissões a mais pra vc. o Webstart checa o certificado, faz uma recomendação do tipo “recomendamos que vc não execute este programa” e depois pergunta: “Vc quer executá-lo”??
Claro que quando vc faz um projeto server side, vc pode proteger relativamente bem o servidor. Se for web, também é mais difícil. Mas e se for um sistema distribuído, com clientes em Java, usando RMI ou algo equivalente?
Em termos de arquitetura, não dá pra confiar nos clientes. Porque se o cara roda um cliente “envenenado”, ele pode burlar esquemas de segurança que estejam colocados do lado do cliente. Assim como é possível aspectar o Together pra pular a parte de licença, é possível mudar um cliente pra ignorar esquemas de segurança e avacalhar um sistema distribuído que era antes seguro.
Quando eu falo em poder, penso na possibilidade que um usuário teria de customizar ao máximo o comportamento do software que roda na máquina dele. O mundo do software livre também é o mundo dos clones.
O “pilar do Java” em termos de segurança é um código assim:
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
}
dentro do defineClass(String name, byte[] b, int off, len, ProtectionDomain protectionDomain).