Dr_Lion Posted August 23, 2016 at 11:59 AM Report #598269 Posted August 23, 2016 at 11:59 AM Estou aqui com uns problemas existenciais sobre a minha máquina. Utilizo o ubuntu e neste momento tenho um utilizador além do root, posso criar mais utilizadores se for necessário. O que pretendo é ter um programa desenvolvido por mim, em que o utilizador consiga usar esse programa, mas não consiga ter acesso ao código nem aos ficheiros que o mesmo usa! Pensei em limitar as permissões apenas para execução, mas não tenho a certeza se funciona??? Sei que assim o utilizador não conseguirá aceder aos ficheiros. Tinha pensado também em criar um segundo utilizador, colocar lá os ficheiros do programa e dar permissões de execução ao 1º utilizador, mas pela questão seguinte penso que seria impossível (se decidisse cifrar a pasta home). Isto resolveria uma parte do problema partindo do princípio que funciona como desejado. Segunda parte, usando live CDs se não estou em erro, consegue-se ganhar acesso a todos os ficheiros desse utilizador que o próprio não teria acesso. Para eliminar este acesso indevido, creio que cifrar a instalação completa do Ubuntu, ou apenas a pasta home iria resolver este problema. Uma terceira dúvida que não passa de uma questão de comodidade. É possível cifrar a pasta home de um utilizador, e esse utilizador não ter password para logar no sistema? Eu sei que do ponto de vista conceptual não faz sentido, mas para mim serve o meu fim! Desde que a pasta cifrada seja cifrada e decifrada quando o utilizador faz log in/logout ou ligando/desligando o pc (mesmo não tendo o utilizador password). Aguardo as vossas respostas sábias a fim de esclarecer as minhas dúvidas.. Desde já agradeço a todos pela ajuda.
Knitter Posted August 23, 2016 at 12:29 PM Report #598270 Posted August 23, 2016 at 12:29 PM 16 minutos atrás, Dr_Lion disse: O que pretendo é ter um programa desenvolvido por mim, em que o utilizador consiga usar esse programa, mas não consiga ter acesso ao código nem aos ficheiros que o mesmo usa! Pensei em limitar as permissões apenas para execução, mas não tenho a certeza se funciona??? Sei que assim o utilizador não conseguirá aceder aos ficheiros. Se o programa de que falas é compilado então, à partida, não há código disponível na máquina, apenas a versão compilada que não dá acesso directo ao código fonte. Caso contrário, se o utilizador conseguir executar os ficheiros consegue ler o conteúdo. 20 minutos atrás, Dr_Lion disse: Tinha pensado também em criar um segundo utilizador, colocar lá os ficheiros do programa e dar permissões de execução ao 1º utilizador, mas pela questão seguinte penso que seria impossível (se decidisse cifrar a pasta home). Isto resolveria uma parte do problema partindo do princípio que funciona como desejado. Segunda parte, usando live CDs se não estou em erro, consegue-se ganhar acesso a todos os ficheiros desse utilizador que o próprio não teria acesso. Para eliminar este acesso indevido, creio que cifrar a instalação completa do Ubuntu, ou apenas a pasta home iria resolver este problema. Cifrar a directoria do utilizador implica que para aceder a qualquer ficheiro dentro dessa directoria é necessário a password usada como chave de cifra, tipicamente é a password do próprio utilizador. Não ajuda no que perguntas no ponto 1, apenas impede que sem a password alguém consiga ler o conteúdo dos ficheiros. 23 minutos atrás, Dr_Lion disse: Uma terceira dúvida que não passa de uma questão de comodidade. É possível cifrar a pasta home de um utilizador, e esse utilizador não ter password para logar no sistema? Eu sei que do ponto de vista conceptual não faz sentido, mas para mim serve o meu fim! Desde que a pasta cifrada seja cifrada e decifrada quando o utilizador faz log in/logout ou ligando/desligando o pc (mesmo não tendo o utilizador password). Não faz muito sentido se estiveres a falar da directoria de utilizador. Normalmente a password do utilizador é usada para decifrar a sua home, se o utilizador não tem password para login alguém tem de fornecer a password de cifra antes do utilizador fazer login (parte do login passa por ler dados da home do utilizador, tem de ser decifrada antes de concluir o login). Podes automatizar isto, executando um processo teu antes do login mas tens de ter a password guardada na máquina, num ficheiro acessível ao utilizador que está a fazer login, resumindo, se cifrares a home do utilizador ele, ou a máquina, têm de ter a password de cifra para concluírem o processo de autenticação/login. Podes, por outro lado, cifrar uma outra pasta, que não a home, onde colocas os dados... mas voltamos sempre ao mesmo, quando quiseres usar os dados nessa pasta tens de fornecer a password para decifrar, ou o utilizador a sabe ou ela está guardada num qualquer ficheiro na máquina. Além disso, no momento em que a directoria é decifrada, qualquer que seja o método, todos os ficheiros são acessíveis (respeitando as permissões definidas, naturalmente). Podes explicar melhor qual o objectivo do que estás a tentar fazer? Não há muitos casos de uso onde pretendas dar a um utilizador a permissão de executar um programa mas impedir o acesso a todo e qualquer ficheiro desse mesmo programa...
Dr_Lion Posted August 23, 2016 at 02:29 PM Author Report #598275 Posted August 23, 2016 at 02:29 PM A parte de cifrar a diretoria era mesmo para proteger de tentativas de acessos exteriores, funciona para isso não para o resto. Já compreendi que para cifrar tem que haver uma password, seja a do utilizador ou não, e que tem que ser colocada, seja de forma automática ou manual, até aqui não tenho dúvidas. O que me estás a estragar os planos, foi a tua primeira afirmação, se o utilizador tiver permissões de execução também consegue ler os ficheiros! Tens mesmo a certeza? Eu já li em algum lado que supostamente não conseguiria ler, mas não afirmo com certeza porque li na diagonal.. Quanto á tua pergunta, neste caso existem também scripts em plaintext, mas mesmo que fosse apenas código compilado, é possível reverter o código máquina, e obter o programa em assembly (muito trabalhoso para perceber) ou mesmo em C que se torna bastante mais compreensível! O que pretendo fazer é simples, é fazer um programa que seja não digo impossível (porque nunca será!) mas pelo menos bastante trabalhoso para copiar.
Knitter Posted August 23, 2016 at 02:48 PM Report #598276 Posted August 23, 2016 at 02:48 PM Se retirares as permissões de leitura de um utilizador, mesmo que coloques permissões de execução, esse utilizador não pode executar o script, executar implica poder ler. Mas é simples de testar, pega no teu script, atribuí a um utilizador de teste, retira as permissões de leitura de grupo e de outros e tenta executar esse script. Agora, podes criar uma forma de iniciar o script através de um terminal com permissões diferentes, ou fazer de forma a que o script (ou o programa) seja executado por um utilizador mas com as permissões de outro... normalmente dá mais trabalho do que realmente benefício. É apenas opinião, mas acho que estás a complicar a procurar soluções para problemas que não existem. Como disseste, não há forma de impedir a cópia, mesmo compilado é possível obter as instruções em Assembly, e até em C, mas o teu programa é assim tão inovador, tão financeiramente atraente que seja mais barato/prático copiar o conteúdo, passando por todo o processo de tentar "decompilar" o programa, do que fazer simplesmente uma versão com as mesmas funcionalidades? Se queres que o utilizador possa executar o teu programa ele terá sempre possibilidade de copiar o binário/script para outro lado qualquer, por isso é que se usam sistemas de protecção de cópia que não dependem de permissões (e já viste como esses sistemas funcionam bem... só se for para que os vende 🙂, quem os compra só gasta dinheiro e tempo). Sei que existem outros tópicos sobre como "proteger" o código/programa de cópias, pesquisa no fórum e pode ser que alguma das soluções sirva para o que pretendes, não me lembro se há algum tópico exactamente sobre a mesma questão. 1 Report
Dr_Lion Posted August 24, 2016 at 11:03 AM Author Report #598313 Posted August 24, 2016 at 11:03 AM Segui a tua sugestão, estive a ler outros tópicos, deu para tirar algumas ideias e pensar noutras. Talvez apenas cifrar o diretório da aplicação em vez da pasta home, e ter uma verificação/autenticação remota que permita obter mais garantias que o sistema não é violado.
Knitter Posted August 25, 2016 at 08:38 PM Report #598369 Posted August 25, 2016 at 08:38 PM Ainda acho que estás a tentar resolver um problema que não existe 🙂 Essa validação online como é que vai funcionar se não existir comunicação com o sistema remoto que faz a autenticação? Ou então o que é que me impede de capturar todo o texto que é recebido para ver qual é a chave para decifrar a directoria? Ou como é que o sistema remoto sabe que eu copiei os ficheiros depois da directoria ser decifrada, até porque tem de estar decifrada para o programa funcionar... e como é que volta a ser cifrada, não será o sistema remoto a fazer isso certamente, e o programa não se cifra a si próprio 🙂 Mas já estou a meter-me onde não sou chamado 🙂
pwseo Posted August 25, 2016 at 10:36 PM Report #598370 Posted August 25, 2016 at 10:36 PM Provavelmente consegues fazer com que o programa leia ficheiros aos quais o utilizador não tem acesso se o programa conseguir executar as instruções de leitura com outro user id / group id (terias que ler sobre setuid, setgid). No entanto, isto só resolve parte dos problemas que estás a tentar resolver. Se alguém executa um programa localmente, isso implica permissão de leitura e execução no binário que contém o programa -- isto permite a tal «descompilação». Se o resto for feito correctamente com setuid / setgid, podes impedir que o utilizador aceda aos ficheiros a não ser no contexto do programa que está a ser executado, mas logicamente poderá facilmente aceder aos mesmos de variadíssimas formas desde que haja acesso físico aos dados. Ainda assim, deixa-me dizer-te que partilho da opinião do Knitter: parece-me que estás a exagerar um pouco nisto tudo.
Dr_Lion Posted August 26, 2016 at 02:19 PM Author Report #598385 Posted August 26, 2016 at 02:19 PM Ok, é normal que se possa exagerar quando se fala em segurança, já que nenhum sistema é 100% seguro. Sendo que pelo meio da conversa surgem sempre ideias interessantes, coisas que se aprendem e mesmo que a eficácia dos mecanismos de segurança seja moderada, é sempre melhor ter duas ou 3 opções implementadas do que nenhuma. Pois não impede alguém com bastante motivação para atingir o seu objectivo, mas dificulta o processo a todos os que tentam. Para a validação online é óbvio que tem que existir (e já existe comunicação entre os sistemas). Se a comunicação da chave ocorrer sobre um canal seguro (cifrado) já reduz as possibilidades de captura dos dados, pelo menos sem acesso físico á máquina! O sistema remoto não tem forma de saber se já foram copiados dados, ou se vão ser, esse caso (cópia dos dados) tem que ser resolvido do lado da máquina a correr o programa com alguma forma de reduzir as possibilidades/facilidades de isso acontecer. Pois essa parte do programa não se cifrar a si próprio eu sei, porque era algo que dava bastante jeito, mas para a questão a cifra tinha pensado em usar a pasta home cifrada, ou apenas uma pasta dentro da home, onde estivesse o programa. Como é normal a autenticação e o mecanismo de cifra teriam que estar fora da pasta cifrada. Também me parece que a forma mais segura de proteger o programa seria este existir do lado do servidor e as máquinas clientes apenas se ligarem ao servidor e executarem o programa no servidor, dessa forma apenas haveria valores passados na comunicação e o programa nunca estaria do lado do cliente. OU verificar se o cliente não sofreu alterações e toda a ver que for para ser usado o servidor enviava o programa para o cliente, e removia com base em determinadas condições. Como é óbvio também não é prático para programas elaborados devido ao tamanho dos mesmos! Agradeço a dica do userid/groupid vou pesquisar sobre esse assunto.
Knitter Posted August 26, 2016 at 02:41 PM Report #598390 Posted August 26, 2016 at 02:41 PM Talvez não tenha explicado as minhas reservas, não é uma questão de segurança porque o estás a tentar fazer não é relacionado com segurança. Isso seria se estivesses a tentar evitar alteração aos dados dos utilizadores, a sua integridade ou impedir que sejam feitas acções que possam violar os dados envolvidos. O que estás a fazer é um sistema de protecção de cópia, e é minha opinião que está mais que demonstrado que o custo técnico e naturalmente financeiro dessas soluções é sempre superior aos benefícios que fornece; basta olhar para os anos de cópias ilegais de todos os tipos de software, com os mais variados tipos de protecção, desde sistemas de validação em servidor a sistemas de validação físicos. Quem ganha com sistemas de protecção de cópia é quem os vende, quem os compra só perde dinheiro, quem os implementa por conta própria só gasta tempo 🙂
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now