Buscar

Segurança de SO

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Inspire-se (Vídeo) - Métodos Criptográficos ->
Apresentador: Diego Escobar (Especialista em Sistemas de Informação)
Comentários do apresentador e algumas pesquisas relacionadas em cima do tema abordado na entrevista:
Quais as origens da criptografia?
Pra gente começar a falar de criptografia, a gente tem que tentar lembrar a origem da palavra criptografia se for parar pra pensar já existe muito antes da própria criação da palavra criptografia a palavra criptografia vem do grego cripto de oculto e grafia de escrita, ou seja, "escrita oculta", uma maneira de você tentar esconder escondendo, levando mais pro lado dos gregos então, você tem ali uma invensão da criptografia por Júlio César aonde ele já utilizava para atos de guerra, para poder mandar mensagens para fronte de guerra, poder se comunicar com aliados, e por isso foi muito mais utilizado pela questão de poder esconder aquilo que estava escrito; Julio Cesar utilizou isso de uma maneira muito simples, ele simplesmente reorganizou o alfabeto, então imagina as letras do alfabeto (a, b, c, d, e....) uma em sequência da outra e ele mudou a organização das próprias letras sem modificar em posições diferentes e então escrevia as mensagens dele a partir dessa reorganização claro que quem ta escrevendo ao mesmo tempo que quem tava recebendo a mensagem devia saber essa nova organização o alfabeto para poder então descriptografar, então ele escrevia criptografado e quem ia ler precisava descriptografar essa mensagem. Outro pequeno ponto em relação a isso, tem outra pessoa nessa mesma época que também criou uma maneira de se criptografar, a ideia era o seguinte: utilizar tochas ou fogueiras e a longa distância você conseguir fazer mais ou menos a ideia de mandar mensagem a sol, pra lembrar o telégrafo.
O que diferencia um algoritmo de hash de um algoritmo de critografia?
O algoritmo de hash ele é mais para você confirmar que aqueles dados não foram alterados por ninguém, por exemplo, o CPF, quando você escreve na maioria dos locais geralmente é assim, o último o digito é o número confirmador de todos os digitos anteriores, então existe um algoritmo que vai fazer um cálculo com todos os números do CPF e o último dígito confirma esses número, então se você altera um número o dígito confirmador não confirma mais; então basicamente o resto funciona assim. Já a criptografia funciona da seguinte maneira: ela é pra você esconder a mensagem então no meio da informática tem vários tipos de algoritmos que vão poder gerar esse tipo de alternância das letras ou mesmo criar uma nova forma de se escrever o alfabeto em geral você precisa ter o alfabeto que você ta escrevendo com a mensagem que você quer e um outro alfabeto, nesse caso específico digital, em larga escala as melhores são as criptografias que são utilizadas com números primos, números primos são gigantescos e eles tem uma regrinha ali que ele só é divisível por ele e por 1, então por isso ele consegue ter essa facilidade em você tem um número primo e você ser obrigado a testar todos os números até chegar lá; então quanto maior esse número primo, mais difícil da programação quebrar essa cripotografia então você usa esse número primo pra poder criar um número randomico ali, embaralhar tudo e criptografar.
Como funciona a criptografia em uma requisição web?
Quando você decide entrar em um site, esse site sendo bem confiável em geral eles são, mas falando, por exemplo, do google que você vai acessar e já tem uma certa credibilidade no mercado eles usam mecanismos para poder validar a conversação entre o cliente e o servidor que tem os dados que você deseja acessar, então é nesse primeiro contato o servidor e o cliente é chamado de "Hello" (Hello World, kk); eles decidem no começo o tipo de criptografia que vai ser usada, depois o servidor envia pro cliente um pacote aonde tem apk e uma ACA que são duas autenticações apk é uma senha e ACA é um certificado, esse certificado o brawser vai validar e o apk vai ser utilizado no próximo passo que no caso é a geração de duas keys: k1 e k2, dessas duas senhas o cliente vai gerar o primeiro passo que é pegar o apk que foi trazido pelo servidor vai criar uma autenticação, vai enviar esse pacote pro servido de volta, os dois então vão ter os mesmos dados desses dados eles vão gerar cada um duas keys e elas são idênticas por que a base dele é a mesma o código de autenticação de criptografia é o mesmo para os dois, isso já foi combinado lá no início; então eles utilizam essas duas senhas k1 e k2 para se comunicar k1 ele é utilizado para poder autenticar os dados, ou seja, o cliente mandou alguma coisa pro servidor o servidor autentica pra você saber que aquilo não foi mexido, que alguém mal intencionado ou algum hacker não alterou alguma coisa, ele autentica com k1 e a senha k2 ele usa pra descriptografar e para criptografar então ele escreve a mensagem, criptografa de um dos lados, envia esse pacote autenticado e do outro lado tem que descriptografar para que o servidor e o cliente possam entender e se comunicar.
-----------------------------------------------------------x--------------------------
Tópico 1 ->
Introdução:
Olá, aluno(a)! Nesta unidade, iremos abordar sobre os Métodos Criptográficos e o processo de Integração de Conhecimento: Manipulação de linguagens de novos paradigmas. Ao longo da unidade vamos discutir sobre o processo de resolução de um problema de programação e todos os fatores que estão atrelados a essa situação, por exemplo, os diferentes conjuntos de conceitos, as distinções das linguagens de programação e os seus paradigmas.
Ao longo do texto, apresentamos uma das maneiras que conseguimos aplicar a quantificação de riscos nos sistemas operacionais a partir de uma análise entre as opções disponíveis no mercado.
-----------------------------------------------------------x--------------------------
Tópico 2 ->
Métodos Criptográficos:
Os sistemas de computação atuais são usados para a realização de diversas operações como a realização de transações a partir de aplicativos como comércio eletrônico, que geralmente contém informações confidenciais (como dados bancários e dados pessoais dos clientes). A segurança desses sistemas depende de vários mecanismos que utilizam técnicas primitivas de criptografia como um componente básico. Tais técnicas criptográficas podem ser muito complexas porque o design desses sistemas visa impedir ataques computacionais, de força bruta.
Essa complexidade leva à crença de que a segurança forte é fundamentalmente incompatível com o bom desempenho. No entanto, a base dessa crença é frequentemente a implementação de software de algoritmos que foram originalmente destinados à implementação eficiente de hardware. Esses algoritmos permanecem relativamente pesados em comparação com outras tarefas computacionais normalmente encontradas em um servidor ou estação de trabalho.
Para solucionar esse problema, os fornecedores comercializam placas de aceleração de hardware que implementam vários algoritmos criptográficos usados por protocolos e aplicativos de segurança. De certa forma, isso reflete a evolução das unidades de processamento gráfico (GPUs - graphics processing units) de alto desempenho para atender às necessidades da comunidade de jogos de computador. Observe que, apesar do crescente desempenho de CPUs, GPUs são consideradas essenciais para jogos (ou outros aplicativos que exigem uma auto performance), porque geralmente superam o processador do sistema, pois a CPU pode ser usada para concluir outras tarefas enquanto a GPU está lidando com a parte da renderização gráfica.
Nesse ambiente, as GPUs e os aplicativos devem estar em conformidade com as APIs padrão do setor, como DirectX e OpenGL. No caso da criptografia, os sistemas operacionais modernos não têm o suporte necessário para fornecer acesso eficiente a funcionalidade semelhante aos aplicativos e ao próprio sistema operacional através de uma API uniforme que abstrai os detalhes de hardware. Como resultado,
os aceleradores são frequentemente usados diretamente através de bibliotecas vinculadas a aplicativos normalmente exigindo conhecimento específico do dispositivo pelos aplicativos e impedindo que o próprio sistema operacional utilize facilmente esse hardware.
O OpenBSD Cryptographic Framework (OCF), é uma camada de virtualização de serviço implementada dentro do kernel do sistema operacional, que fornece o acesso uniforme à funcionalidade do acelerador, ocultando detalhes específicos do dispositivo por trás de uma API cuidadosamente projetada. A abstração introduzida permite o suporte aos novos aceleradores de hardware e permite que os aplicativos usem o acelerador sem o devido conhecimento específico do dispositivo. Além disso, essa camada intermediária não afeta indevidamente o desempenho comum quando essas abstrações são introduzidas.
O OCF tem sido usado com o OpenBSD e provou ser estável e eficiente na prática, embora continue evoluindo em resposta a novos requisitos. O OCF foi portado para o FreeBSD e NetBSD com uma porta em desenvolvimento para o Linux, oferecendo recursos como balanceamento de carga em vários aceleradores, migração de sessão e encadeamento de algoritmos. Ao longo da unidade será possível observar o funcionamento do OCF e a sua devida integração.
Saiba mais:
O projeto OpenBSD incorporou a criptografia em vários locais do sistema operacional. A partir da versão 2.6, o OpenBSD contém o OpenSSH, uma versão absolutamente livre de patentes.
É possível fazer o download do projeto e conhecer um pouco mais sobre o assunto no link.
Link para o projeto:
> https://www.openbsd.org/crypto.html
Aplicando a Criptografia:
A estrutura criptográfica do OpenBSD (OCF), é uma camada de virtualização de serviço assíncrona dentro do kernel que fornece o acesso uniforme para as placas aceleradoras criptográficas de hardware. O OCF implementa duas APIs para serem utilizadas por outros subsistemas de kernel, uma para o uso de consumidores (outros subsistemas de kernel) e outra para uso dos produtores (drivers de dispositivo de placa de criptografia).
O OCF suporta duas classes de algoritmos: simétrico (por exemplo, DES, AES, keyedMD5, HMAC-SHA1) e assimétrico (por exemplo, RSA, DSA). Os Algoritmo simétrico (por exemplo, DES, AES, MD5, algoritmos de compactação etc.) são construídos em torno do conceito da sessão, uma vez que tais algoritmos normalmente são usados para processamento de dados em massa. Já o Algoritmo Assimétrico são implementados como operações individuais: nenhum cache de sessão é realizado nessa metodologia.
A API do produtor permite que um driver registre no OCF os vários algoritmos que ele suporta e quaisquer outras características do dispositivo (por exemplo, suporte para encadeamento de algoritmos, geração de números aleatórios incorporada, etc.). O driver do dispositivo também registra as funções de retorno de chamada que o OCF usa para inicializar e as sessões de algoritmo simétrico de desmontagem e emissão das solicitações de algoritmo assimétrico.
Qualquer sessão usando o driver (ou algoritmo) extinto é migrado para outras placas sob demanda (ou seja, quando a próxima solicitação para essa seção for inicializada). O registro e o cancelamento de registro podem ocorrer a qualquer momento; os drivers de dispositivo típicos fazem isso no momento da inicialização do sistema. Os drivers notificam o OCF quando as solicitações individuais são concluídas pelos aceleradores.
Além do driver de hardware, um “pseudodriver” de criptografia de software registra vários algoritmos da chave simétrica quando o sistema é inicializado. O “pseudodriver” atua como um provedor de último recurso de serviços de criptografia; qualquer acelerador de hardware adequado será tratado de preferência. No entanto, o kernel não implementa algoritmos assimétricos no software por motivos de desempenho. Para usar o OCF, os consumidores primeiro criam uma sessão com o OCF, especificando o(s) algoritmo(s) a usar, modo de operação (por exemplo, CBC, HMAC, etc.), chaves criptográficas, vetores de inicialização e número de rodadas. O OCF suporta o encadeamento de algoritmos, ou seja, executa a criptografia e a proteção de integridade em uma operação. Tais operações combinadas são usadas por praticamente todos os protocolos de segurança de transferência de dados. Para a criptografia / descriptografia, os consumidores transmitem ao OCF os dados para serem processados, sendo que uma cópia dos parâmetros são usados para inicializar a sessão.
Os dados podem ser fornecidos em forma de mbufs (listas vinculadas de buffers de dados usados pelo subsistema de rede para armazenar pacotes) ou como uma coleção de blocos de memória potencialmente não contíguos (que inclui o caso de um único buffer de dados contíguo). Além disso, o emissor de uma solicitação pode especificar se a criptografia deve ser realizada no local ou se os dados criptografados devem ser retornados em um buffer separado. Esses vários deslocamentos indicam onde iniciar e finalizar a criptografia, onde colocar o código de autenticação de mensagem (MAC) e onde encontrar a inicialização do vetor (se já estiver presente no buffer) ou onde escrevê-lo na saída.
O encadeamento criptográfico do kernel é periodicamente invocado pelo agendador e envia todas as solicitações pendentes aos produtores apropriados. Ele também lida com todas as solicitações concluídas chamando as funções de retorno. Portanto, o encadeamento não é preemptivo pelos processos do usuário, embora as interrupções de hardware ainda sejam tratadas. Atualmente, o encadeamento deve operar com alta prioridade para evitar problemas de sincronização.
Ao usar o “pseudodriver” de software, isso pode causar latência significativa no agendamento de aplicativos e nas operações de kernel de baixa prioridade. Depois que a solicitação é processada, o segmento de criptografia chama a rotina de retorno de chamada fornecida pelo consumidor. Se ocorreu um erro, o retorno de chamada é responsável por qualquer ação corretiva. A migração da sessão é implementada recriando a sessão usando os parâmetros iniciais da sessão que acompanham todas as solicitações da forma como já foi descrito.
As operações assimétricas são tratadas de maneira semelhante, embora sem o suporte para o conceito de sessão; os parâmetros neste caso incluem uma matriz de parâmetros. Isso é implementado simplesmente mantendo o controle do número de sessões ativas em cada produtor. Na configuração da sessão, o OCF escolhe o produtor com o menor número de sessões ativas.
-----------------------------------------------------------x--------------------------
Tópico 3 ->
Integração de Conhecimento: Manipulação de Linguagens de Novos Paradigmas (parte I):
A programação é uma disciplina rica e as linguagens de programação geralmente exigem diversos esforços dos profissionais para serem compreendidas. Este tópico destina-se a oferecer aos leitores a apresentação dos princípios necessários para que os interessados possam começar rapidamente a usar esses conceitos e linguagens. Mencionamos alguns paradigmas importantes que merecem uma atenção especial.
O processo de resolução de um problema de programação requer a escolha dos conceitos corretos. Todos os problemas requerem diferentes conjuntos de conceitos para diferentes partes. Isso se dá, porque as linguagens de programação devem suportar muitos paradigmas. Um paradigma de programação é uma abordagem para programar em um dispositivo (por exemplo no computador) com base em uma teoria matemática ou em um conjunto coerente de princípios.
Cada paradigma suporta um conjunto de conceitos que o torna o melhor para um certo tipo de problema. Por exemplo, a programação orientada a objetos é a melhor opção para os problemas com um grande número de abstrações de dados relacionados e organizados em uma hierarquia. A programação síncrona discreta é a melhor opção para a resolução de problemas reativos, ou seja, problemas que consistem em reações a sequências
de eventos externos. Podemos citar como exemplo, algumas das linguagens que suportam esses paradigmas: Java, Prolog e Esterel.
Uma linguagem deve idealmente suportar muitos conceitos de maneira bem fatorada, para que o programador possa escolher os conceitos certos sempre que eles são necessários sem serem sobrecarregados pelos outros. Esse estilo de programação às vezes é chamado de programação multiparadigmática, o que implica que é algo exótico e fora do comum.
Infelizmente as principais linguagens de programação estão longe de apoiar isso. No entanto, entender os conceitos corretos pode ajudar a melhorar o estilo de programação, mesmo em linguagens que não os suportam diretamente, assim como a programação orientada a objetos é possível ser implementada em C com a atitude correta do programador.
Existem muito menos paradigmas de programação do que linguagens de programação. É por isso que é interessante focar nos paradigmas, em vez do que nas linguagens. Desse ponto de vista, as linguagens como Java, Javascript, C#, Ruby e Python são praticamente idênticas: todas implementam o paradigma orientado a objetos com apenas pequenas diferenças, pelo menos do ponto de vista dos paradigmas.
Cada paradigma é definido por um conjunto de conceitos de programação, organizados em uma linguagem básica, chamada de linguagem de núcleo do paradigma.
Taxonomia de Paradigmas de Programação
Os conceitos são os elementos primitivos usados para construir os paradigmas. Frequentemente dois paradigmas que parecem bem diferentes (por exemplo, programação funcional e programação orientada a objetos) diferem em apenas um conceito. Quando uma linguagem é mencionada sob um paradigma, significa que parte da linguagem é destinada (por seus projetistas) a apoiar o paradigma sem interferência de outros paradigmas. Isso não significa que existe um ajuste perfeito entre a linguagem e o paradigma.
De acordo com Weinberg (1977) as principais propriedades dos sistemas podem ser relacionadas entre a complexidade (o número de componentes de interação) e a aleatoriedade (quão não determinístico é o comportamento do sistema). Existem dois tipos de sistemas que a ciência entende: agregados (por exemplo, o gás de moléculas em uma caixa, entendidas pela mecânica estatística) e máquinas (por exemplo, relógios e máquinas de lavar roupa).
As linguagens de programação modernas evoluíram ao longo de mais de cinco décadas de experiência na construção de soluções programadas para problemas complexos do mundo real. Esses programas modernos podem ser bastante complexos, atingindo tamanhos medidos em milhões de linhas de código, escrito por grandes equipes de programas ao longo de muitos anos. Nesse sentido, essas linguagens não são apenas construções arbitrárias da mente humana. Elas exploram os limites da complexidade de uma maneira mais objetiva.
Os conceitos não são combinados arbitrariamente para formar paradigmas. Eles podem ser organizados de acordo com o princípio da extensão criativa. Este princípio foi definido pela primeira vez por Felleisen (1990). Ele nos fornece um guia para encontrar a ordem a partir do vasto conjunto dos paradigmas. Num dado paradigma, pode acontecer que os programas se tornem complicados por razões técnicas que não têm relação direta com os problemas que está sendo resolvido. Isso é um sinal de que há um novo conceito esperando para ser descoberto. Para mostrar como o princípio funciona, podemos observar o paradigma de programação funcional sequencial simples.
De acordo com Van Roy & Seif (2004), aqui estão três cenários de como os novos conceitos podem ser descobertos e adicionados para formar novos paradigmas:
Se precisarmos modelar várias atividades independentes, teremos que implementar várias pilhas de execução e um mecanismo para impedir a execução de uma atividade para outra. Toda essa complexidade é desnecessária se adicionarmos um conceito para a linguagem: simultaneidade.
Se precisarmos modelar a memória atualizável, ou seja, entidades que lembrem e atualizam de forma contínua, teremos que adicionar dois argumentos a todas as chamadas de função relativas a essa entidade. Os argumentos representam os valores de entrada e saída da memória. Isso é pesado e também não é modular, porque a memória viaja por todo o programa. Toda essa falta de jeito é desnecessária se adicionarmos um conceito para a linguagem: estado nomeado.
Se precisarmos modelar a detecção e correção de erros, nas quais qualquer função pode detectar um erro a qualquer momento e transferir o controle para uma rotina de correção de erros; é necessário adicionar códigos de erro a todas as saídas e condições da função para testar todas as funções solicitadas dos códigos de erro retornados. Toda essa complexidade é desnecessária se adicionarmos um conceito para a linguagem: exceções.
O tema comum nesses três cenários é que precisamos fazer modificações generalizadas (não locais) do programa para lidar com um novo conceito. E se a necessidade de modificações difundidas se manifesta, podemos considerar isso como um sinal de que é um novo conceito esperando para ser descoberto. Ao adicionar esse conceito a linguagem, não precisamos dessas modificações difundidas e recuperamos a simplicidade do programa.
Segundo Van Roy & Seif (2004) as linguagens devem ser organizadas de acordo com o princípio da extensão criativa. A única complexidade do programa é a necessária para resolver o problema. Nenhum elemento adicional é necessário para superar as inadequações técnicas da linguagem.
-----------------------------------------------------------x--------------------------
Tópico 4 ->
Integração de Conhecimento: Manipulação de Linguagens de Novos Paradigmas (parte II):
No mundo de hoje, a segurança da informação é muito importante, isto pode estar relacionados à nossa política nacional, civilização, economia, assuntos militares, etc. Portanto, para o sistema de segurança da informação, a segurança do (SO) é muito importante. O sistema operacional é o intermediário principal que reside no hardware e nos controles da segurança de um ambiente de computação. Qualquer vulnerabilidade existente no sistema operacional causa a vulnerabilidade no host, portanto, a segurança do SO é considerada uma das partes críticas de um ambiente de computação. Qualquer sistema operacional que fornece a confiabilidade e suporta e soluciona os problemas de segurança de forma eficiente para atender a um certo conjunto de requisitos é chamado de sistema operacional seguro ou confiável.
Um sistema operacional gerencia o funcionamento e a operação de todas as aplicações complexas do sistema de computador. Ele também deve ser capaz de lidar com um crescente número de ataques maliciosos perigosos, erros de software e falhas de hardware. Pela Internet, todos os navegadores aceitam baixar e executar arquivos executáveis. SOs de desktop e muitos outros aplicativos são compatíveis com a tecnologia de plug-in tornando o ambiente host mais vulnerável a ataques. Além disso, há uma tendência crescente de que mais usuários respondam a diferentes códigos executáveis que estão presentes na Internet. Caso esses códigos executáveis forem direcionados para fontes não autorizadas ou infectadas por vírus, a execução desses arquivos pode elevar a segurança do sistema.
Hoje em dia, a maioria da população utiliza os smartphones, computadores ou laptops em suas tarefas rotineiras. Nesse caso, esses sistemas estão lidando com ambientes diferentes como a web. Ao mesmo tempo, esses sistemas também estão lidando com dados privados ou sensíveis e utilizando para o gerenciamento de assuntos corporativos confidenciais. Existe o risco de ocorrer ataques maliciosos a partir da Internet. Esses ataques podem modificar esses dados corporativos (que na maioria dos casos são confidenciais). Portanto, a segurança do usuário final e / ou a segurança de toda a corporação está em risco, caso este importante item for negligenciado, poderá causar graves falhas de segurança.
Mecanismo de Segurança do Sistema Operacional:
A segurança é uma tarefa desafiadora em sistemas de computação. O sistema operacional é um componente que gerencia todas as outras aplicações, por isso precisa ser protegido.
Para analisar as características de um sistema operacional, não existe um conjunto geral de métricas disponíveis que podem acessar os possíveis riscos presentes no sistema operacional.
Métodos de Segurança:
Os métodos usados para a segurança do sistema operacional incluem recursos para garantir a segurança de software e a segurança de hardware (Song et. all. , 2009).
Hardware: o método de segurança consiste em garantir a proteção de E / S, proteção de execução, armazenamento e proteção enquanto o método de segurança do software está relacionado principalmente para os seguintes recursos.
A. Identificação e autenticação: identificação do usuário e autenticação é obrigatória. A identificação para acessar o sistema é fundamental, pois é necessário saber as informações da identidade do usuário. E o processo de conexão do usuário a partir do identificador com o usuário é conhecido como autenticação.
B. Controle de acesso: a principal segurança do sistema de computadores e seu mecanismo é controle de acesso. Consiste em três etapas. Primeiro é a obtenção da autorização, segundo é a permissão de acesso e o terceiro é a imposição da permissão de acesso.
C. Menor privilégio: é necessário fornecer aos usuários apenas o tipo de privilégios necessários para concluir a tarefa da qual ele necessita realizar.
D. Canal confiável: geralmente em computadores uma interação entre o sistema operacional e o usuário passa pelo meio da camada de aplicação que não é confiável. Então a operação do sistema precisa garantir que durante a comunicação nenhum Trojan possa ser capaz de capturar a informação.
E. Proteção contra vírus: no mundo real, é muito complexo o processo de proteger o sistema de computador contra vírus. Em geral, certas funções podem ser protegidas usando os Mecanismo de operação do MAC (Mandatory Access Control - Controle de acesso obrigatório).
Quantificação de Riscos:
Infelizmente, não é fácil quantificar os riscos relacionados aos sistemas operacionais.
Para fins pessoais e fins profissionais Linux, Windows, Mac e Solaris são considerado os melhores sistemas operacionais e bilhões de usuários usam esses sistemas. Antes de selecionar qualquer um deles, é necessário responder a questão de qual deles executa o requerido recurso da melhor maneira. Neste item, analisaremos o Windows e o Linux e seus módulos de segurança.
Sistema operacional Windows:
O Windows é o sistema operacional mais popular; o ambiente de desktop é dominado pelo sistema operacional Windows. É um sistema operacional portátil e extensível, portanto, ele pode tirar proveito do hardware e novas técnicas. O Windows permite multiprocessamento (simétrico) e vários ambientes operacionais.
O sistema operacional Windows é monolítico. Dentro do Design do sistema operacional Windows, é dado muito foco à GUI (Graphical User Interface - Interface gráfica do usuário). Se considerarmos a administração, as ações executadas por um administrador pode ser facilmente isolado das ações do usuário. O Kernel do sistema operacional Windows é muito seguro. O kernel fornece a virtualização. O processo de virtualização separa uma máquina virtual da outra e é por isso que é considerado bom para segurança.
O Windows é composto de certos componentes que não podem conceder acesso a um usuário sem autenticação adequada e a devida identificação. Somente a função do subsistema de segurança oferece o controle de acesso. Isso pode ser implementado dando privilégios e direitos diferentes para o usuário. É necessário descobrir os possíveis riscos associados aos privilégios, direitos e capacidades. Ao fazer isso, podemos encontrar os riscos e erros com mais eficiência.
A segurança da rede é alcançada pelo monitoramento de dados usando o soquete. Nesta técnica os dados são monitorados usando o soquete. Em qualquer fase do processo quando perceber a necessidade, ele monitorará os dados da rede, e aplicará certo desenvolvimento nos dados da base líquida para permitir uma transmissão segura.
Sistema operacional Linux:
O Linux é baseado nos princípios UNIX e é gratuito, possui o seu código aberto. A interface do usuário e a programação é compatível com o sistema UNIX. Um kernel do sistema operacional Linux é totalmente original, mas permite que muitos aplicativos baseados em UNIX possam ser executados. Por causa do desempenho (razões pelas quais seu kernel é implementado como um kernel monolítico), os drivers podem ser carregados e descarregados drasticamente.
O design do Linux é bastante modular e os servidores Linux são considerados os melhores para administração não local. Ele suporta um ambiente multiusuário. Usando o agendador de compartilhamento de tempo, ele fornece a proteção entre vários processos em execução. Permite a programação multithread. No Linux, para reduzir a repetição de dados compartilhados por muitos processos, o gerenciamento de memória usa uma cópia na gravação e o compartilhamento de página. Por causa do código aberto o Linux, permite uma avaliação mais “peer” do código para que os usuários e desenvolvedores consigam encontrar bugs e corrigir o código. Mas isso não significa que o Linux é 100% seguro. No passado, o Windows havia sido o sistema operacional mais atacado. Por esse motivo, a maioria dos aplicativos baseados no Windows foram transferidos para o Linux. Por fim, os invasores começaram a atacar (visar) o Linux.
O kernel do Linux é o software mais sofisticado e complexo no sistema. Ele representa o núcleo do sistema. Se o kernel ou qualquer uma de suas partes for afetado por um vírus ou qualquer código malicioso, o sistema irá ficar corrompido e todas as informações secretas podem ser roubadas e os arquivos podem ser excluídos. O kernel do Linux fornece a virtualização. Usando a técnica de virtualização, podemos alcançar o isolamento, executando várias máquinas virtuais (VMs) em uma máquina física, um aplicativo é corrompido e executado em uma determinada VMs não pode se inter-relacionar com os outros diferentes aplicativos em VMs separadas.
O Secure File System (SFS) é usado para proteger os dados do arquivo, o SFS utiliza as técnicas criptográficas. A criptografia de SFS são realizadas no espaço do kernel do Linux. Para armazenar dados de arquivos, o SFS solicita ao usuário que crie um diretório chamado "ecrypt" como ecryptdir. Sem a intervenção do usuário, todos os arquivos colocados neste diretório serão criptografados de forma transparente.
A segurança de rede Linux gerencia os acessos e permissões. Primeiro é a senha de segurança, que é utilizada para acessar o sistema Linux, os usuários precisam passar por um processo de autenticação nesse processo que todos os usuários precisam inserir a senha e a conta e o sistema valida o usuário, concedendo o acesso.
No Linux, cada usuário recebe um nível diferente de permissões para acessar quaisquer dados. Alguns usuários devem ter mais acesso do que os outros que têm menos acesso aos dados. Para aumentar a segurança do sistema o Linux remove os serviços desnecessários. Em uma rede, o Linux limita o número de endereços IP (Internet Protocol). Um super usuário é usado a uma senha geralmente conhecida pelo sistema que deverá ser o administrador e precisa ser revisado periodicamente.
-----------------------------------------------------------x--------------------------
Tópico 5 ->
A Empregabilidade da Segurança do Sistema Operacional:
A segurança dos sistemas de computação é um tópico vital cuja importância continua aumentando. Muito dinheiro foi perdido e a vida de muitas pessoas foi prejudicada quando a segurança do computador falhou. Os ataques em sistemas de computadores são tão comuns que são inevitáveis em quase qualquer cenário em que você executa a computação. Geralmente, todos os elementos de
um sistema de computador podem estar sujeito a ataque e falhas, mas os sistemas operacionais são particularmente fundamentais do ponto de vista da segurança.
Para começar, praticamente tudo roda em cima de um sistema operacional. Como regra, se o software que você está executando, seja um sistema operacional, um middleware, ou qualquer outro elemento for inseguro, o que está acima também será inseguro. As falhas de segurança em um sistema operacional, têm um imenso impacto para os usuários e softwares. Outra razão pela qual a segurança do sistema operacional é tão importante é que, em uma última análise, todos os nossos os softwares dependem do comportamento adequado do hardware subjacente: o processador, a memória e os dispositivos periféricos.
A tarefa de proteger um sistema operacional não é fácil, pois os sistemas operacionais modernos são grandes e complexos. Sua experiência em escrever código já deve ter indicado que quanto mais código você tem, mais complexos são os algoritmos e é inevitável que exista uma maior probabilidade do seu código conter falhas. As falhas na segurança do software geralmente surgem desses tipos de situações.
Outro desafio na proteção de sistemas operacionais é que eles são, na maioria das vezes são construídos para suportar múltiplos processos de forma simultânea. Existem muitos mecanismos em um sistema operacional destinados a separar os processos um do outro e a proteger peças compartilhadas de hardware de serem usadas de maneiras que interfiram com outros processos.
Considere a questão da segurança do sistema operacional a partir de uma perspectiva diferente. O papel de um sistema operacional é fornecer abstrações úteis para que os aplicativos se desenvolvem. Esses aplicativos devem confiar nas implementações do SO e suas abstrações para funcionar como eles são definidos. Frequentemente, uma parte da definição de tais abstrações é a segurança do seu comportamento. Por exemplo, esperamos que o sistema de arquivos do sistema operacional imponha algumas restrições de acesso. Os aplicativos podem então construir isso a partir de sua expectativa de atingir as metas de segurança necessárias, como contar com o sistema de arquivos e as garantias de acesso para garantir que um arquivo especificado como não gravável não seja alterado. Se os aplicativos não puderem contar com a implementação adequada da abstração do SO as garantias de segurança, não serão atendidas.
Obviamente, a segurança do sistema operacional é vital, mas difícil de alcançar. Então, o que fazemos para proteger nosso sistema operacional? Responder a essa pergunta tem sido um desafio para gerações de cientistas da computação e ainda não há uma resposta completa. Mas há alguns princípios e ferramentas importantes que podemos usar para proteger sistemas operacionais. Esses são geralmente embutido em qualquer sistema operacional de uso geral com o qual você provavelmente trabalhará, e eles alteram o que pode ser feito com esse sistema e como você o faz.
Reflita:
Diante de vários processos possivelmente simultâneos e de interação em execução numa mesma máquina, como podemos garantir que os recursos que cada processo tem permissão para garantir o acesso são exatamente aqueles a que deve acessar, exatamente da maneira que desejamos?
Que mecanismos devem ser fornecidos pelo hardware e como podemos usá-los para resolver os problemas de segurança?
O que Estamos Protegendo?
É provável que não consigamos uma boa proteção, a menos que tenhamos uma visão bastante abrangente do que estamos tentando proteger quando dizemos que o nosso sistema operacional deve ser seguro.
Um sistema operacional típico de commodity tem controle completo de todo o hardware na máquina e é capaz de fazer literalmente tudo o que o hardware permitir. Isso significa que pode controlar o processador, ler e escrever todos os registros, examinar qualquer local da memória principal e executar qualquer operação que um de seus periféricos suporte. Exemplificando o sistema operacional pode fazer, segue a lista abaixo:
> examinar ou alterar a memória de qualquer processo;
> ler, escrever, excluir ou corromper qualquer arquivo em qualquer meio persistente gravável de armazenamento, incluindo discos rígidos e unidades flash;
> alterar o agendamento ou até interromper a execução de qualquer processo;
> envie qualquer mensagem para qualquer lugar, incluindo versões alteradas daquelas que um processo desejava enviar;
> ativar ou desativar qualquer dispositivo periférico;
> conceder a qualquer processo acesso aos recursos de qualquer outro processo;
> remover arbitrariamente qualquer recurso controlado por um processo;
> responder a qualquer chamada do sistema com uma mentira maximamente prejudicial.
Em essência, os processos estão à mercê do sistema operacional. É quase impossível para um processo "proteger" qualquer parte de si mesmo de um sistema operacional malicioso. Nós tipicamente suponhamos que o nosso sistema operacional não seja realmente malicioso, mas é necessária apenas uma falha para permitir que um malware faça com que o sistema operacional se comporte mal, acarretando que esse processo obtenha qualquer um dos poderes do próprio sistema operacional.
Esse ponto deve fazer você pensar seriamente na importância de projetar os sistemas operacionais seguros e, mais comumente, aplicar patches de segurança a qualquer sistema operacional em execução. Falhas de segurança em seu sistema operacional podem comprometer tudo sobre a máquina na qual o sistema funciona.
Metas e Políticas de Segurança:
O que queremos dizer quando afirmamos que queremos que um sistema operacional ou qualquer sistema seja seguro?
Essa é uma afirmação bastante vaga. O que realmente queremos dizer é que existem coisas que gostaríamos que acontecesse no sistema e coisas que não queremos que acontecessem, e gostaríamos de obter um alto grau de garantia.
O que isso se resume é que queremos especificar as metas para ter um comportamento relevante para a segurança do nosso sistema e escolher as abordagens de defesa para atingir essas metas a um custo razoável.
Saltzer Schroeder (1975), em um alto nível conceitual, definiram três grandes objetivos relacionados à segurança que são comuns para muitos sistemas, incluindo os sistemas operacionais:
Confidencialidade - É necessário armazenar as informações de forma seguro. Se alguma informação deve estar protegida de outros usuários, não devemos permitir que essa informação seja repassada.
Integridade - se alguma informação ou componente de um sistema deveria estar em um estado específico, não podemos permitir que um invasor altere essa informação. Muitas vezes é importante certificar-se não apenas de que as informações não mudaram, mas de que foram criadas por um usuário de confiança.
Disponibilidade - se alguma informação ou serviço deve ser disponível para uso próprio ou de terceiros, devemos verificar se um invasor não pode impedir seu uso. Por exemplo, se sua empresa está tendo uma grande venda, você não quer que seus concorrentes possam bloquear as ruas em torno de sua loja, impedindo que seus clientes o alcancem.
Uma importante dimensão extra de todos esses três objetivos é que queremos que o controle esteja compartilhando em nossos sistemas. Compartilhamos nossos as informações com algumas pessoas e não com outras. É necessário permitir que algumas pessoas alterem os bancos de dados de nossa empresa, mas não apenas qualquer pessoa. Alguns sistemas precisam estar disponibilizados para um conjunto específico de usuários preferenciais.
Reflita:
Após os ataques terroristas de 11 de setembro, o compartilhamento de informações tornou-se um dos objetivos do governo dos Estados Unidos no desenvolvimento de seus recursos para tentar evitar essas atrocidades. Foi estabelecido entre agências e departamentos governamentais que a equipe de segurança crie uma metodologia para compartilhar regularmente as informações relevantes.
A partir desse cenário,
quando as informações são armazenadas em vez de compartilhadas?
Quem precisa dessas informações pode ser capaz de reagir em tempo hábil?
O compartilhamento de informações é crucial para as empresas ou governos?
Para um sistema real, você precisa fazer uma busca detalhada dos objetivos específicos. Em um sistema operacional típico, por exemplo, podemos ter um objetivo de confidencialidade, afirmando que o espaço de memória de um processo não pode ser lido arbitrariamente por outro processo. Podemos ter um objetivo de integridade declarando que, se um usuário gravar um registro em um arquivo específico, outro usuário que não consiga gravar esse arquivo não pode alterar o registro. Podemos ter uma meta de disponibilidade informando que um processo em execução no sistema não pode monopolizar a CPU e impedir que outros processos obtenham sua parte na CPU.
Precisamos ser capazes de especificar tais detalhes em nossas metas de segurança. Os sistemas operacionais são escritos para serem usados por muitas pessoas com muitas necessidades diferentes, e a segurança do sistema operacional deve refletir esses aspectos.
-----------------------------------------------------------x--------------------------
Tópico 6 ->
Conclusão:
Apresentamos ao longo dessa unidade que as linguagens de programação modernas evoluíram ao longo de mais de cinco décadas de experiência na construção de soluções programadas para problemas complexos do mundo real. Nesse sentido, essas linguagens não são apenas construções arbitrárias da mente humana, elas exploram os limites da complexidade de uma maneira mais objetiva.
Vimos que a segurança é uma tarefa desafiadora em sistemas de computação. O sistema operacional é um componente que gerencia todas as outras aplicações, por isso precisa ser protegido.
Acreditamos que com as recomendações que propusemos ao longo de nossos estudos existe um grande potencial no aprofundamento dos seus estudos em relação aos desafios que existem em relação a segurança dos sistemas operacionais.
-----------------------------------------------------------x--------------------------

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando