sexta-feira, 4 de fevereiro de 2022

Técnicas de Recuperação de Arquivos Apagados

Introdução


A complexidade na recuperação de um arquivo excluído, seja de forma acidental ou não, depende da forma e, principalmente, de QUANDO o mesmo foi excluído. Caso o usuário tenha feito uma exclusão simples no Windows, por exemplo, utilizando a tecla Delete, uma simples visita a pasta Lixeira e a execução de um comando de restauração será mais do que suficiente para ter o arquivo "são e salvo". Porém, caso a exclusão tenha sido executada a partir do conjunto de teclas Ctrl+Alt+Del ou o usuário tenha limpado a pasta Lixeira, temos um aumento de complexidade. Caso o arquivo resida em uma região corrompida no seu HD, a situação fica ainda mais complicada.


De acordo com Rikhi (2021), nem tudo está perdido: quando um arquivo é "permanentemente" excluído, o sistema operacional remove apenas o endereço do arquivo excluído de um banco de dados conhecido por Master File Table (MFT). É a partir da referida tabela que o SO localiza e acessa arquivos. Caso um endereço de arquivo seja excluído da MFT, o arquivo fica inacessível para o SO, mas continua a residir no disco, intacto, enquanto outro arquivo não for endereçado para a posição que agora está disponível. O espaço alocado para o arquivo é marcado como disponível pelo SO e um novo arquivo poderá ser armazenado no mesmo endereço. Quando isso acontecer, ocorrerá uma sobrescrita que, aí sim, destruirá permanentemente os dados que ali estiverem. Por isso, o fator TEMPO é crucial em processos de recuperação de arquivos: quanto mais tempo for protelado para uma ação de recuperação, maior a chance do SO utilizar posições assinadas como disponíveis e sobrescrever dados.


Existem métodos, técnicas e ferramentas que se aproveitam do MFT e de outros recursos para facilitar ou até mesmo viabilizar a recuperação parcial ou total de arquivos excluídos. Alguns deles serão descritos a seguir.

Métodos, Técnicas e Ferramentas para a Recuperação de Arquivos


Na lista abaixo, serão listadas algumas ações que poderão ser tomadas na recuperação de arquivos excluídos:


  1. Não deixar para depois - Sentiu falta de algum arquivo, pare tudo o que estiver fazendo no computador. Não salve nada que estiver editando, não baixe nenhum arquivo na Internet, não instale nada. Em resumo: Não faça o SO interagir com o HD. Tudo isso para não correr o risco do SO utilizar algum endereço assinado como disponível na MFT e sobrescrever o(s) arquivo(s) a serem recuperados. Quanto mais cedo você tentar recuperar um arquivo removido, maiores serão as chances de recuperá-lo;
  2. Confira a pasta Lixeira - Outra solução óbvia, mas que não exige conhecimentos avançados em perícia digital. Quem sabe o arquivo a ser recuperado ainda não está por lá?
  3. Utilize um software especializado (de preferência portável, que possa ser executado a partir de um pendrive ou HD Externo, pois o ideal é não instalar nada no HD enquanto os arquivos não forem recuperados) - Existem soluções gratuitas (Recuva, Paragon Rescue Kit Free Edition, CGSecurity PhotoRec, Minitool Partition Wizard Free, TestDisk, entre outras) e pagas (Stellar Windows Data Recovery, Kroll Ontrack EasyRecovery, Disk Drill, etc.) para a recuperação de arquivos. Boa parte das aplicações gratuitas fornecerão tudo o que é necessário para ações de recuperação, limitando o usuário a recuperar uma quantidade específica de arquivos, ou arquivos com uma extensão específica, ou serem mais lentos na recuperação. Já as aplicações pagas são otimizadas na busca, ilimitadas na quantidade de arquivos que possam ser recuperados e prometem encontrar arquivos que as versões gratuitas não conseguiriam encontrar;
  4. Faça backup regularmente - Não tem jeito: É preciso fazer essa recomendação que, apesar de ser óbvia para alguns usuários, para outros está distante se ser acatada. Existem inclusive ferramentas, algumas delas nativas em SOs, que auxiliam no gerenciamento e automação de backups. Para aqueles que preferem realizar backups manualmente, o ideal é que mantenham uma frequência de, pelo menos, uma semana para cada backup. Lopes (2021) ainda recomenda a adoção de soluções de armazenamento na nuvem (ICloud, Dropbox, Google Drive, Microsoft OneDrive, entre outros) como forma de simplificar a realização de backups automáticos;
Além das alternativas já citadas, Lopes (2021) também descreve uma técnica bastante utilizada por profissionais especializados e peritos, conhecida por Data Carving. Segundo a Computer Hope (2019), Data Carving ou File Carving é uma técnica forense que visa reconstruir arquivos a partir dos seus fragmentos, mesmo quando seus metadados não estiverem disponíveis. O Data Carving é realizado a partir da identificação e análise da assinatura de dados brutos, que marcam o início e/ou o fim de um determinado tipo de arquivo (documento, imagens, vídeos, mensagens, áudio, etc.). Tal técnica é bastante utilizada em HDs corrompidos, por exemplo. Mesmo que o processo não consiga recuperar um arquivo na íntegra, é possível a recuperação dos seus fragmentos e, a partir dos mesmos, deduzir o tipo de arquivo ou extrair/deduzir parte do seu conteúdo.

Existem várias ferramentas de Data Carving no mercado, como a Encase, o TestDisk, a FTK, a Foremost, entre outras.

Exercícios

1) [Ano: 2012 Banca: MPE-RS Órgão: MPE-RS Prova: MPE-RS - 2012 - MPE-RS - Técnico em Informática - Equipamentos] Assinale a alternativa que descreve corretamente o princípio de funcionamento dos programas de recuperação de arquivos apagados indevidamente em um disco rígido, na maior parte dos sistemas de arquivos.

A) No momento do apagamento dos arquivos, é criada uma cópia em um espaço especial do disco, para futura recuperação.

B) Quando um arquivo é apagado, é colocada uma marca de disponibilidade na entrada de diretório e nos blocos que o arquivo ocupa, mas efetivamente os dados não são apagados do disco.

C) Em um disco rígido, o sistema procura minimizar o número de escritas em um determinado setor, fazendo com que um setor seja utilizado apenas após todos os setores do disco serem escritos.

D) No momento do apagamento do arquivo, é realizada uma cópia em memória RAM, antes que o sistema seja desligado, para eventual recuperação.

E) No caso de utilização do Windows 7, só é possível recuperar arquivos que não tenham sido movidos para a Lixeira.


2) [Ano: 2014 Banca: COTEC Órgão: Prefeitura de Rubelita - MG] Os softwares para recuperação de dados são uma oportunidade de recuperar arquivos deletados do disco rígido, cartão de memória, pendrive, MP3 Player, iPod, entre outros dispositivos. No Windows, quando se apaga um arquivo e em seguida se esvazia a lixeira, esse arquivo ainda existe no dispositivo de armazenamento de dados, isso porque o Windows remove apenas a referência do arquivo deletado na tabela de alocação de arquivos e libera a área do disco que ele usa para gravação de novos dados. Enquanto essa área não é sobrescrita por novos arquivos, existe a possibilidade de recuperação dos arquivos que estavam gravados nessa área. Para recuperar os arquivos deletados, são necessárias algumas precauções, EXCETO

A) Não gravar nenhum arquivo novo na mídia onde o arquivo deletado estava armazenado.

B) Se precisar recuperar arquivos que estavam na unidade do sistema (normalmente o disco C:/), não instalar nenhum programa no computador.

C) Instalar programa de backup de dados e ativar auditoria de dados.

D) Certificar-se de manter o sistema o mais próximo possível do inalterado, não abrindo ou fechando arquivos ou programas, pois isso pode criar arquivos temporários que substituirão os arquivos deletados.

3) [Ano: 2021 - Banca: Instituto Brasileiro de Incentivo ao Desenvolvimento Organizacional Eireli - IBDO - Prova: IBDO - Prefeitura de Iguaba Grande - Procurador Municipal - 2021] Uma vez residentes na Lixeira, os arquivos podem ser recuperados, isto é, podem voltar para seu local original, antes de terem sido excluídos. Para isso, basta seguir os procedimentos abaixo:

A) 1º - "Abra" a lixeira. 2º - Selecione o arquivo e, em seguida, selecione a opção restaurar.

B) 1º - "Abra" o gerenciador de tarefas. 2º - Selecione a opção ferramentas do sistema. 3º - Abra a lixeira. 4º - Selecione o arquivo desejado e, em seguida, selecione a opção restaurar.

C) 1º - "Abra" o painel de controle. 2º - Selecione a opção gerenciador de tarefas. 3º - Abra a lixeira. 4º - Selecione o arquivo desejado e, em seguida, selecione a opção restaurar. 

D) Nenhuma das alternativas anteriores. 

Gabarito

1 - B / 2 - C / 3 - A

Referências

BEDFORD, M.  How to Recover Deleted Files. Tech Advisor. 2020. Disponível em: <https://www.techadvisor.com/how-to/software/recover-deleted-files-3365461/> Acesso em: 29 jan. 2022.

COMPUTER HOPE.  Data Carving. 2019. Disponível em: <https://www.computerhope.com/jargon/d/data-carving.htm> Acesso em: 29 jan. 2022.

LOPES, D.  O que você precisa saber para recuperar arquivos apagados. Lopes Perícias. 2021. Disponível em: <https://lpericias.com.br/o-que-voce-precisa-saber-para-recuperar-arquivos-apagados/> Acesso em: 29 jan. 2022.

RIKHI, I.  Easy Methods to Recover Deleted Data from Your PC. Stellar. 2021. Disponível em: <https://www.stellarinfo.com/blog/easy-methods-to-recover-deleted-data-from-the-computer/> Acesso em: 28 jan. 2022.


quinta-feira, 27 de janeiro de 2022

Malwares e Análise de Código Malicioso

Introdução


A Cert.br, em sua cartilha de segurança para Internet (2020), conceitua códigos maliciosos (também conhecidos como pragas ou malware) como "programas desenvolvidos para executar ações danosas e atividades maliciosas em equipamentos, como computadores, modems, switches, roteadores e dispositivos móveis (tablets, celulares, smartphones, etc). Um atacante pode instalar um código malicioso após invadir um equipamento ou explorando alguma vulnerabilidade existente nos programas nele instalados". Na referida cartilha, o Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no Brasil lista os principais tipos de malwares existentes, descrevendo as características de cada tipo, além das ameaças inerentes a cada um. Tal lista, que é cobrada constantemente em concursos públicos de TI e até mesmo em concursos para outras áreas onde a disciplina de Informática é cobrada em edital (as vezes no formato "na letra da lei", isto é, o enunciado e/ou as alternativas são formuladas a partir de cópias dos itens da mesma), é apresentada na íntegra a seguir:

  • Vírus - Programa ou parte de um programa de computador, normalmente malicioso, que se propaga inserindo cópias de si mesmo, se tornando parte de outros programas e arquivos (CERT.BR, 2020);
  • Cavalo de Troia (Trojan) - Programa que, além de executar funções para as quais foi aparentemente projetado, também executa outras funções, normalmente maliciosas, e sem o conhecimento do usuário (CERT.BR, 2020);
  • Ransomware - Programa que torna inacessível os dados armazenados em um equipamento, geralmente usando criptografia, e que exige pagamento de resgate para restabelecer o acesso ao usuário (CERT.BR, 2020);
  • Backdoor - Programa que permite o retorno de um invasor a um equipamento comprometido, por meio da inclusão de serviços criados ou modificados para este fim (CERT.BR, 2020);
    • Remote Access Trojan (RAT) - Trojan de Acesso Remoto. É um programa que combina as características de trojan e backdoor, já que permite ao atacante acessar o equipamento remotamente e executar ações como se fosse o usuário (CERT.BR, 2020);
  • Worm - Programa capaz de se propagar automaticamente pelas redes, explorando vulnerabilidades nos programas instalados e enviando cópias de si mesmo de equipamento para equipamento (CERT.BR, 2020);
  • Bot - Programa similar ao worm e que possui mecanismos de comunicação com o invasor que permitem que ele seja remotamente controlado (CERT.BR, 2020);
    • Zumbi - Equipamento infectado por um bot. Pode ser controlado remotamente, sem o conhecimento do seu dono (CERT.BR, 2020);
    • Botnet - É uma rede formada por centenas ou milhares de equipamentos zumbis e que permite potencializar as ações danosas executadas pelos bots (CERT.BR, 2020);
  • Spyware - Programa projetado para monitorar as atividades de um sistema e enviar informações coletadas para terceiros (CERT.BR, 2020);
    • Keylogger - Tipo de Spyware capaz de capturar e armazenar as teclas digitadas pelo usuário no teclado do equipamento (CERT.BR, 2020);
    • Screenlogger - Tipo de Spyware usado por atacantes para capturar as teclas digitadas pelo usuário em teclados virtuais, disponíveis principalmente em sites de Internet Banking (CERT.BR, 2020);
    • Adware - Programa projetado especificamente para apresentar propagandas (CERT.BR, 2020);
  • Rootkit - Conjunto de programas e técnicas que permite esconder e assegurar a presença de um invasor ou de outro código malicioso em um equipamento comprometido (CERT.BR, 2020);
Dentre as já tradicionais técnicas de mitigação existentes (manter aplicações atualizadas, instalar antivírus, usar um firewall, instalar aplicativos de fontes confiáveis, fazer backups, ter o cuidado de clicar em links suspeitos, entre outros), técnicos e analistas de segurança adotam o processo sistemático de análise de malware na identificação de vulnerabilidades que cada malware explora e na prevenção de ameaças. Tal processo é descrito a seguir.

Análise de Malware


De acordo com Baker (2022), a Análise de Malware é o processo de entendimento sobre o comportamento e o propósito de um arquivo suspeito ou de uma URL. A saída desta análise contribui com a detecção e a mitigação de ameaças em potencial. Já Zeltser (2021) afirma que a Análise de Malware nada mais é do que a interseção entre a resposta a incidentes, a computação forense, a administração, monitoramento e segurança de sistemas e redes e a engenharia de software.


Principais Estágios da Análise de Malware


Segundo Zelter (2021), a Análise de Malware pode ser resumida em quatro estágios ou fases, ordenadas de forma crescente de acordo com a sua complexidade (do estágio de menor complexidade até a de maior complexidade) na lista a seguir:

  1. Análise totalmente automatizada: O arquivo suspeito é executado em um ambiente de análise de malware automatizado, chamado sandbox. A partir de tal ambiente, é possível obter relatórios das atividades do arquivo, como sua interação com arquivos de sistema e rede;
  2. Análise de propriedades estáticas (análise estática): O foco deste estágio está na análise dos metadados e outros detalhes embarcados em um arquivo suspeito, como strings, sem executá-lo. Dessa forma, é possível obter algumas dicas sobre os blocos de código do arquivo que merecem maior atenção, sendo foco de análise mais detalhada nos próximos estágios. Aqui vale um adendo feito por Lopes (2020): A análise estática não é útil contra um programa compactado ou que possua código ofuscado, já que o mesmo precisaria ser descompactado ou ter a(s) técnica(s) de ofuscação descoberta(s) para que a análise estática seja efetivamente realizada, tornando a referida análise mais difícil e desafiadora. Dentre as formas possíveis de se identificar arquivos comprimidos suspeitos, tem-se a análise de entropia. Segundo a IBM (2021) a entropia de um arquivo mede a aleatoriedade dos dados de um arquivo e é usada para determinar se um arquivo contém dados ocultos suspeitos. A escala vai de 0 (não aleatória) a 8 (totalmente aleatória). De acordo com Renovaci (2020), valores altos de entropia são comuns em arquivos comprimidos, cifrados e malwares (80% dos malwares existentes possuem alta entropia);
  3. Análise de comportamento interativo (análise dinâmica): Nessa fase, o arquivo é executado em um ambiente isolado e controlado (como uma máquina virtual), sendo aplicada uma série de experimentos para o estudo do comportamento do arquivo suspeito. Dentre os experimentos que podem ser executados, Lopes (2020) lista os seguintes: O uso de ferramentas antivírus; O uso de hashes para identificar malwares (É possível submeter um arquivo malicioso para um programa de extração de hash, que irá gerar uma espécie de "impressão digital" do arquivo. Caso o hash extraído seja igual a um hash que identifique um malware, o arquivo malicioso será desmascarado); A coleta de comandos sequenciais, funções e cabeçalhos do arquivo malicioso;
  4. Engenharia Reversa: Aqui há a análise do código que compõe o arquivo a partir de ferramentas como disassemblers e debuggers, com o objetivo de compreender as capacidades chave e preencher as lacunas que ficaram nos estágios anteriores.

Exercícios


1) [CESPE - 2018 - Polícia Federal - Perito Criminal Federal - Área 3] Existem diversas técnicas para descompilar programas maliciosos. Conforme a característica de um malware, essas técnicas podem ou não ser utilizadas. A respeito desse assunto, julgue o seguinte item.

Existem três técnicas chaves para a análise de malware: análise binária, análise de entropia e análise de strings.

A) Errado
B) Certo


2) Normalmente, quando se verifica que um binário possui alta entropia, é possível que o malware utilize técnicas de compactação, o que torna a análise mais complexa.

A) Errado
B) Certo


3) [Ano: 2016 Banca: CESPE / CEBRASPE Órgão: TCE-PA Prova: CESPE - 2016 - TCE-PA - Auditor de Controle Externo - Área Informática - Analista de Segurança] Acerca da análise de malwares executáveis em ambiente Windows, julgue o item a seguir. 

Por meio da análise estática, é possível descrever o comportamento de um malware como se ele estivesse sendo executado em tempo real.

A) Errado
B) Certo


4) [Cebraspe (Cespe) - 2021 - MP-AP - Analista Ministerial - Tecnologia da Informação] O botnet consiste em

A) um pedaço de código incorporado em um sistema de software.

B) um tipo de malware que cria uma rede de computadores contaminados

C) um programa que realiza propositalmente atividades secundárias, não percebidas pelo usuário.

D) um programa que coleta informações sobre o usuário do computador e envia essas informações para outra parte

E) uma forma de fraude na Internet praticada comumente por meio de mensagem eletrônica


5) [UFRR - 2019 - UFRR - Técnico de Tecnologia da Informação ] É um tipo de malware feito para extorquir dinheiro de sua vítima. Esse tipo de cyber ataque irá criptografar os arquivos do usuário e exigir um pagamento para que seja enviada a solução de descriptografia dos dados da vítima. O scareware é seu tipo mais comum e usa táticas ameaçadoras ou intimidadoras para induzir as vítimas a pagar.

O texto acima se refere ao:

A) Spyware

B) Botnet

C) Spam

D) DDoS

E) Ransomware

 


Gabarito


1 - A / 2 - B / 3 - A / 4 - B / 5 - E

Referências


BAKER, K. Malware Analysis. Crowdstrike. 2022. Disponível em: <https://www.crowdstrike.com/cybersecurity-101/malware/malware-analysis/>. Acesso em: 26 jan. 2022.

CERT.br. Cartilha de Segurança para Internet - Fascículo Códigos Maliciosos. 2020. Disponível em: <https://cartilha.cert.br/fasciculos/codigos-maliciosos/fasciculo-codigos-maliciosos.pdf>. Acesso em: 26 jan. 2022.

IBM. Analisando arquivos para conteúdo integrado e atividade maliciosa. 2021. Disponível em: <https://www.ibm.com/docs/pt-br/qsip/7.4?topic=content-analyzing-files-embedded-malicious-activity>. Acesso em: 27 jan. 2022.

LOPES, P. Análise de Malware – Minicurso – Conceitos técnicos essenciais. Peritum Consultoria e Treinamento. 2020. Disponível em: <https://periciacomputacional.com/analise-de-malware-minicurso-conceitos-tecnicos-essenciais/>. Acesso em: 27 jan. 2022.

RENOVACI, R. Analise de Malwares — Fundamentos de Analise Estática com PeStudio. 2020. Disponível em: <https://medium.com/@rafaelrenovaci/analise-de-malwares-fundamentos-de-analise-est%C3%A1tica-com-pestudio-46451243c19e>. Acesso em: 27 jan. 2022.


ZELTZER, L. How You Can Start Learning Malware Analysis. SANS. 2021. Disponível em: <https://www.sans.org/blog/how-you-can-start-learning-malware-analysis/>. Acesso em: 26 jan. 2022.




segunda-feira, 17 de janeiro de 2022

RAID - Redundant Array of Inexpensive Disks

Introdução


RAID (Redundant Array of Independent Disks, ou Matriz Redundante de Discos Independentes) é uma tecnologia de armazenamento onde dois ou mais discos rígidos trabalham como uma única unidade ou um único sistema de armazenamento (um disco virtual). Tal configuração pode variar, a depender do objetivo de quem a use, mas o principal conceito do RAID é prover armazenamento de dados com alta disponibilidade a partir da redundância de dados, isolando o sistema de armazenamento de situações como falhas de sistema ou de infraestrutura (STONEFLY, 2021).


    Segundo o Dell Suporte Brasil (2022?), um disco virtual é capaz de ser configurado para obter um aumento de desempenho através da divisão de dados (Striping) ou prevenir a perda de dados através de espelhamento (Mirroring) ou paridade (Parity):


  • Striping: A divisão de dados em múltiplos discos permite a leitura e gravação de dados de forma simultânea, aumentando a performance. Porém, caso ocorra falha em um dos discos rígidos, todos os dados serão perdidos. Uma representação gráfica do processo é apresentada na Figura 1;
Figura 1 - Exemplo da ocorrência de Striping em um disco virtual RAID


Fonte: Dell Suporte Brasil, 2022 (Adaptado)

  • Mirroring: O espelhamento grava exatamente os mesmos dados de um disco em outro disco, garantindo a redundância dos dados. Se um dos discos falhar, os dados estarão disponíveis no outro disco envolvido. Tão configuração é ilustrada na Figura 2;
Figura 2 - Configuração de Mirroring em um disco virtual RAID


Fonte: Dell Suporte Brasil, 2022 (Adaptado)
  • Parity: Fornece redundância a partir de informações de paridade. A partir da paridade, é possível recuperar o conteúdo de um disco defeituoso. A forma como a paridade é distribuída pela disco virtual é apresentada na Figura 3.
Figura 3 - Parity em um disco virtual RAID


Fonte: Dell Suporte Brasil, 2022? (Adaptado)

    Ainda segundo a Dell Suporte Brasil (2022?), diferentes configurações de RAID definem níveis. Cada nível utiliza as configurações de forma diferente, sejam utilizando-as de forma individual ou em conjunto. Cada nível RAID recebe um número que o identifique. Exemplo: No RAID 0, temos a configuração Striping; Já no RAID 5, temos Striping e Parity trabalhando em conjunto. Os principais níveis de RAID existentes serão descritos em detalhes a seguir.


Níveis de Configuração RAID


  • RAID 0 - Utiliza a configuração de Striping. Para que possa ser utilizado, o disco virtual deverá ser formado por pelo menos dois discos rígidos. Um disco virtual com RAID 0 pode ler e gravar dados mais rápido do que uma configuração não RAID. É importante destacar que no RAID 0 não há redundância: se um dos discos falhar, todos os dados serão perdidos. Porém, é possível utilizar a capacidade total dos discos físicos na capacidade de armazenamento do disco virtual. Exemplo: Se um disco virtual RAID 0 é formado por dois HDs de 1 TB cada, teremos um disco virtual de 2 TB. Logo, o RAID 0 tem por foco melhorar o desempenho em processos de leitura e escrita e aumentar a capacidade de armazenamento de um disco virtual (DELL SUPORTE BRASIL, 2022?);
  • RAID 1 - É adotada a configuração de espelhamento. Apenas dois discos são necessários para a criação do disco virtual. A velocidade de gravação poderá ser equiparada ou pior do que a obtida em uma configuração não RAID. Mas o foco de tal nível não está no desempenho, mas sim na redundância: se um dos discos falhar, os dados continuarão disponíveis no outro HD. Substituindo o HD defeituoso, a configuração do disco virtual é reconstruída e os dados serão copiados para o novo HD. No RAID 1, temos uma maior segurança se o compararmos com o RAID 0 (DELL SUPORTE BRASIL, 2022?);
  • RAID 5 - Combina Striping com Parity, dependendo de, no mínimo, três discos. A velocidade de leitura é superior a sistemas não RAID, podendo ser aumentada a partir da adição de novos discos. A velocidade de gravação também irá aumentar, porém de forma inferior à leitura, devido a sobrecarga gerada pelo cálculo de paridade. A capacidade de armazenamento deste nível é definida pela fórmula (n-1) * s, onde n é igual ao número de discos e s é igual a capacidade do menor disco. Por exemplo: Se temos quatro HDs de 1 TB, a capacidade do disco virtual com RAID 5 será de (4-1) * 1 = 3 TB. Na ocorrência de falhas em um HD, os dados não serão perdidos, mas irá gerar queda de performance de leitura e gravação enquanto o disco defeituoso não for substituído. Na ocorrência de falhas em dois HDs de forma simultânea, todos os dados serão perdidos (DELL SUPORTE BRASIL, 2022?);
  • RAID 6 - Combina Striping com paridade dupla, requerendo pelo menos quatro discos. A performance é maior do que sistemas não RAID. Ao contrário do RAID 5, mesmo que haja falha simultânea em 2 HDs, não haverá perda de dados (graças a paridade dupla). A desvantagem está na capacidade de armazenamento do disco virtual, dada pela fórmula (n-2) * s. Por exemplo: Uma configuração RAID 6 com 4 HDs de 1 TB cada irá criar um disco virtual de (4-2) * 1 = 2 TB. Logo, se trata de uma configuração que prioriza a redundância em detrimento a desempenho e capacidade de armazenamento (DELL SUPORTE BRASIL, 2022?);
  • RAID 10 - Utiliza Striping com Mirroring, dependendo de no mínimo quatro HDs na formação do disco virtual. Os discos são primeiro divididos com RAID 0 (formando conjuntos com dois HDs) e, em cada conjunto, é aplicado o espelhamento a partir do RAID 1 (tal processo é ilustrado na Figura 4). Temos maior performance, se comparado com o RAID 5 ou RAID 6 (por não existir o cálculo de paridade no processo). Tal nível suporta a falha de um HD em um dos conjuntos. Porém, se um conjunto inteiro falhar, todos os dados serão perdidos. A capacidade do disco virtual é calculada pela fórmula (n / 2) * s. Por exemplo: Uma configuração RAID 10 com 4 HDs de 1 TB cada irá criar um disco virtual de (4 / 2) * 1 = 2 TB.
Figura 4 - RAID 10


Fonte: Dell Suporte Brasil, 2022? (Adaptado)

Conclusão


RAID é um sistema de armazenamento de dados que usa vários discos rígidos para trabalharem em conjunto, formando uma única unidade lógica a partir de várias unidades físicas. Uma variedade de configurações pode ser usada para a obtenção de diferentes níveis de redundância, recuperação de erros e desempenho. Trata-se de um sistema de armazenamento normalmente adotado para grande volume de dados a nível de servidor. Um dos principais benefícios do RAID está na possibilidade de uso de muitas unidades de disco de pequena capacidade no armazenamento de grandes quantidades de dados. Além disso, alguns níveis de configuração RAID também permite hot-swapping: é possível a troca de um disco rígido defeituoso e inserir um novo em seu lugar sem a necessidade de desligar o servidor, interferindo positivamente na garantia de disponibilidade dos dados e na manutenção de infraestrutura.


    Tal tópico é recorrente em concursos públicos de TI. É importante que o candidato domine os níveis RAID mais adotados, além das suas vantagens e desvantagens quanto a redundância, desempenho e capacidade de armazenamento de cada nível.



Exercícios


1) [UNIFAL-MG - 2018 - UNIFAL-MG - Analista de Tecnologia da Informação] - Raid é uma sigla que significa Redundant Array of Independent Disks, ou seja, conjunto redundante de discos independentes. Considere um computador com 2 discos rígidos (HDs), cada um com 2Tb. Qual nível de Raid deve ser usado para se ter um volume com 4Tb?

A) Raid 0

B) Raid 1

C) Raid 5

D) Raid 6


2) [FGV - 2018 - Prefeitura de Niterói - RJ - Analista de Políticas Públicas e Gestão Governamental - Gestão de Tecnologia] - O RAID é a tecnologia que monta arranjos de discos com a finalidade de aprimorar a segurança e/ou desempenho. Em relação aos níveis de RAID, analise as afirmativas a seguir. I. RAID 0 divide os dados em pequenos segmentos e os distribui entre os discos disponíveis. II. RAID 1 usa espelhamento para armazenar os dados em duas ou mais unidades. III. RAID 10 exige ao menos 3 discos, pois nesse arranjo um disco é dedicado para armazenar a informação de paridade necessária para detecção de erro. Está correto o que se afirma em

A) I, apenas.

B) II, apenas.

C) III, apenas.

D) I e II, apenas.

E) I, II e III.


3) [IF-SERTÃO - PE - 2016 - IF-SERTÃO - PE - Analista de TI] - A popularização das Tecnologias da Informação e Comunicação (TICs) tem impulsionado a necessidade por armazenamento de dados. Mais do que guardar dados, as corporações necessitam de soluções que forneçam acesso à informação de maneira eficiente, em tempo hábil e, dependendo do caso, com algum nível de proteção contra falhas. Analise as afirmativas acerca de RAID (Redundant Array of Independent Disks). I. O RAID 0 é o primeiro nível a oferecer redundância. Os dados são duplicados em duas ou mais unidades simultaneamente. II. O RAID 1 tem como foco, o desempenho do sistema, uma vez que divide a capacidade de armazenamento em disco para reduzir os tempos de gravação e acesso. III. O RAID 5 considera o aspecto da redundância, pois em vez de existir uma unidade de armazenamento inteira como réplica, os próprios discos servem de proteção. Assim, as informações de paridade e os dados são distribuídos entre todos os discos do sistema.

IV. O RAID 4 dobra o número de bits de paridade, e a integridade dos dados é mantida caso dois discos falhem simultaneamente. V. O RAID 5 é um sistema que alia redundância com baixo custo, por outro lado, possui a limitação de proteger o sistema, se apenas um disco apresentar falha. Assinale a alternativa que corresponde às afirmativas corretas:

A) I e III

B) III e V

C) I, II, III e V

D) I, III e IV

E) Todas estão corretas


4) [FGV - 2016 - COMPESA - Assistente de Tecnologia da Informação] - RAID é uma solução computacional que permite combinar vários discos rígidos, fazendo com que o sistema operacional enxergue o conjunto de discos rígidos como uma única unidade de armazenamento, independentemente da quantidade de discos rígidos em uso. O nível de RAID que duplica uma unidade de disco, ou seja, faz uma cópia da primeira unidade para outra unidade de disco rígido, é o nível

A) 0.

B) 1.

C) 3.

D) 4.

E) 5.

 

5) [FGV - 2013 - SUDENE-PE - Analista Técnico Administrativo - Ciência da Computação] Entre os diversos tipos de RAID que podem ser opcionalmente utilizados por um administrador ao configurar os discos de uma estação de trabalho ou de um servidor, cada um com seus propósitos específicos, podemos citar os tipos a seguir. I.RAID 1. II.RAID 5. III.RAID 10. Assinale a alternativa que indica o(s) que representa(m) configuração com tolerância a falhas.

A) apenas I. B) apenas I e II. C) apenas II e III. D) apenas III. E) I, II e III.

 

Gabarito


1 - A / 2 - D / 3 - B / 4 - B / 5 - E

Referências

DELL SUPORTE BRASIL. RAID - Introdução ao conceito de RAID. [S.I] [2022?]. Disponível em: <https://www.youtube.com/watch?v=PMX61TisJgY> Acesso em: 16 jan. 2022.


DELL SUPORTE BRASIL. RAID - Conhecendo os Níveis de RAID. [S.I] [2022?]. Disponível em: <https://www.youtube.com/watch?v=8V5FoTQpjIE> Acesso em: 17 jan. 2022.


STONEFLY. What is RAID (Redundant Array of Inexpensive Disks). [S.I] [2021]. Disponível em: <https://stonefly.com/resources/what-is-raid> Acesso em: 16 jan. 2022.



domingo, 16 de janeiro de 2022

Ofuscação de Código

Introdução


Segundo Basatwar (2022), ofuscação de código se trata da modificação de código executável para que o mesmo não seja de fácil compreensão ou interpretação. A partir da referida técnica de segurança de aplicações, o código-fonte de um dado software se torna ininteligível e impossível para que um terceiro possa compreendê-lo. A ofuscação de código não impacta nem a interface da aplicação nem suas saídas, mas sim na renderização do seu código-fonte, servindo como uma precaução para que o código seja ininteligível quando o mesmo cair em mãos erradas ou não autorizadas.


Ainda de acordo com Basatwar (2022), tal técnica é de suma importância para evitar a chamada Engenharia Reversa. Tornando uma aplicação difícil de ser compreendida a partir de tal técnica, desenvolvedores garantem a propriedade intelectual dos seus produtos contra ameaças de segurança, evitam acesso não autorizado ao código-fonte de aplicações, além de garantir que vulnerabilidades de segurança não sejam descobertas facilmente. Esse processo restringe o acesso malicioso ao código-fonte e, dependendo do tipo de técnica de ofuscação implementada, é possível garantir vários níveis de proteção de código.


Técnicas de Ofuscação de Código


De acordo com Lutkevich (2022?), a ofuscação de código envolve diferentes métodos. Frequentemente, múltiplas técnicas são usadas em conjunto para reforçar a ofuscação. Programas desenvolvidos em algumas linguagens compiladas, como C# e Java, são fáceis de serem ofuscadas, já que tais linguagens criam instruções de nível intermediário que geralmente são fáceis de serem acessadas e compreendidas para ofuscação. Em contraste, linguagens como C++ dificultam a ofuscação de código, visto que compilam diretamente para linguagem de máquina, mais difícil de ser interpretada pelos desenvolvedores inexperientes no uso de linguagens de baixo nível.


Dentre as técnicas existentes, Lutkevich (2022?) lista as seguintes:


  • Renomeação (renaming) - O ofuscador altera os identificadores de métodos e variáveis. Os novos nomes podem incluir caracteres invisíveis ou fora de contexto;

  • Empacotamento (packing) - O código-fonte passa por um processo de compressão, tornando o código ininteligível para o engenheiro reverso que desconhece o processo de descompressão do mesmo;

  • Fluxo de controle (control flow) - O código-fonte descompilado é feito para ser renderizado sob a lógica de espaguete (spaghetti logic), um anti padrão de projeto onde o objetivo é deixar o código intencionalmente desestruturado e “mal escrito”, resultando em um código difícil de interpretar;

  • Transformação no Padrão de Instruções (Instruction Pattern Transformation) - Nesta abordagem, o ofuscador acessa instruções comuns criadas pelo compilador e as torna mais complexas (é o “fazer a mesma coisa de uma maneira diferente, de forma não usual”);

  • Inserção de Código Fictício (Dummy Code Insertion) - Código fictício pode ser incluído ao código-fonte de um programa, sem afetar a lógica do programa nem suas saídas, com o objetivo de confundir ou dificultar a compreensão do código por parte de um engenheiro reverso;

  • Remoção de Metadados ou Comentários (Metadata or Unused Code Removal) - Metadados e comentários dão ao engenheiro reverso informações extra sobre o programa a ser quebrado;

  • Inserção de predicados opacos (Opaque Predicate Insertion) - Um predicado em um código-fonte é uma expressão lógica que retorna uma saída booleana (verdadeiro ou falso). Predicados opacos são estruturas condicionais onde suas saídas não são facilmente determinadas com análise estatística. Inserindo um predicado opaco, é possível introduzir código desnecessário (Dummy Code) que nunca será executado, mas fará com que um engenheiro reverso tente compreender sua lógica em vão;

  • Anti-debug - Programadores utilizam ferramentas de depuração para examinar códigos-fonte linha a linha. Com tais ferramentas, engenheiros de software podem, por exemplo, encontrar e solucionar problemas. Porém, também permitem a hackers realizar engenharia reversa. Desenvolvedores podem adotar ferramentas anti-debug para identificar quando um hacker está executando um programa de depuração em um ataque;

  • Anti-tamper - Essas ferramentas detectam código que foi adulterado. Na ocorrência de adulteração, o programa é automaticamente interrompido;

  • Criptografia de Strings - Este método usa criptografia para ocultar os Strings no executável e restaura apenas os valores que são necessários na execução do programa. Tal técnica dificulta a engenharia reversa baseada na busca de Strings particulares;

  • Transposição de código - Aqui é feita a reordenação de rotinas e condicionais no código-fonte sem ter um efeito visível no seu comportamento. 


Basatwar (2022) ainda inclui as seguintes técnicas de ofuscação:


  • Ofuscação de Agregação (Aggregation Obfuscation) - Tal técnica foca em alterar a forma como os dados são armazenados em um programa. Por exemplo, matrizes podem ser quebradas em vários vetores, que podem ser referenciados em partes diferentes de um mesmo programa;

  • Ofuscação de armazenamento (Storage Obfuscation) - Nessa técnica, é alterada a maneira como os dados são armazenados na memória. Por exemplo, desenvolvedores podem alterar o escopo original de variáveis (local e global), alterando a real natureza do comportamento desta variável;

  • Ofuscação de ordenação (Ordering Obfuscation) - Este método reordena os dados sem alterar o comportamento de um programa. A ordenação original poderá ser alcançada a partir da implementação de um módulo separado, dedicado para tal processo.

  • Ofuscação de Endereçamento de Memória (Address Obfuscation) - A cada execução de programa, seus endereços virtuais de código e dados são randomizados. Tal técnica faz com que as explorações de erro de memória sejam dificultadas.

Influência da Ofuscação de Código no Desempenho de Aplicações


Basatwar (2022) afirma que a ofuscação de código traz mudanças profundas na estrutura de código de um programa. Com isso, tais mudanças podem interferir significativamente na sua performance. Porém ele pondera: tal interferência pode variar, dependendo da técnica de ofuscação adotada. Por exemplo: Em geral, ofuscação baseada em renaming dificilmente irá impactar no desempenho de aplicações, visto que a mesma é baseada apenas na alteração de identificadores de funções, classes, variáveis, entre outros; Já a ofuscação baseada em fluxo de controle gera um impacto negativo em performance: a inclusão de blocos iterativos para tornar o código mais difícil de ser compreendido por um terceiro adiciona um certo overhead à aplicação, devendo ser utilizada com cautela.


Basatwar (2022) ainda quantifica tal influência: O impacto na performance devido a ofuscação normalmente varia entre 10% a 80%. Logo, a escolha de qual(is) técnica(s) deve ser baseada não apenas na ofuscação de código em si, mas no custo mínimo de desempenho para a aplicação.


Além de problemas associados com desempenho, Lutkevich (2022?) também aponta um problema ético em relação ao uso da ofuscação de código: a partir da referida técnica, também é possível ofuscar malwares, prejudicando por exemplo a ação de antivírus em sua detecção. Tornando o código de malwares ofuscados, os mesmos podem parecer aplicações legítimas ou inofensivas aos utilitários. Alguns antivírus inclusive inutilizam aplicações que possuam código ofuscado justamente para “não correrem o risco”.

Estudo de Caso: Construct 2


O Construct 2 é uma poderosa aplicação projetada para a criação de jogos HTML5 2D multiplataforma. É uma excelente ferramenta para iniciantes no mundo da programação de jogos (já que não é necessário conhecimento prévio em Javascript e HTML5) e para desenvolvedores experientes (por se tratar de uma ferramenta RAD - Rapid Application Development) (SCIRRA, 2021?). Dentre as principais funcionalidades desta aplicação, tem-se a criação de jogos online a partir da geração automática de código JavaScript para várias demandas genéricas de games, como física, uso de dispositivos de I/O, animação, eventos, entre outros. Por se tratar de uma linguagem interpretada e classificada como linguagem client-side, um jogador mais curioso poderia ter acesso ao código-fonte JavaScript gerado pelo Construct 2 para o game alvo, tornando tanto os jogos gerados pela ferramenta quanto a própria ferramenta em si bastante vulnerável para ações de Engenharia Reversa. Sabendo disso, os desenvolvedores da aplicação implementaram procedimentos de ofuscação de código em todos os módulos JavaScript gerados para os games desenvolvidos a partir da mesma. 


Na Figura 1, é possível verificar um trecho de código JavaScript gerado para um jogo hipotético criado a partir da plataforma. Fazendo uma análise rápida no código-fonte em questão, é possível constatar a aplicação, no mínimo, das técnicas de renaming e fluxo de controle (o código está praticamente implementado em uma única linha) por parte do Construct 2, dificultando bastante sua análise, até mesmo para quem criou o jogo. 


Figura 1 - Exemplo de código-fonte JavaScript gerado para um módulo de game criado a partir do Construct 2


  

Conclusão


Tópico recorrente em editais de concurso público com foco em Segurança da Informação, a ofuscação de código define um conjunto de métodos e técnicas que objetivam ocultar código-fonte e, assim, prejudicar ações de Engenharia Reversa em aplicações, garantindo a proteção da lógica de programação adotada no desenvolvimento de software. A literatura e estudos de caso demonstram várias ações que podem ser seguidas por desenvolvedores para atingir tal objetivo. Tais técnicas, inclusive, podem ser encadeadas para garantir um maior nível de ofuscação de código. A depender da complexidade da(s) técnica(s) de ofuscação adotada(s), quedas de desempenho podem ocorrer. Assim como a maioria das invenções humanas, técnicas de ofuscação também podem ser utilizadas para o mau: é possível ofuscar código malicioso contido em malwares, confundindo antivírus no processo de detecção dos mesmos.


Exercícios


1) [Ano: 2016, Banca: IADES, Órgão: PC-DF, Prova: IADES - 2016 - PC-DF - Perito Criminal - Ciência da Computação/Informática] - Técnicas de ofuscação de código são úteis para proteger a implementação do código-fonte contra agentes mal-intencionados. Isso é especialmente importante quando, por exemplo, deseja-se dificultar o acesso ao código Javascript que é transmitido para o lado cliente de uma aplicação web ou quando se deseja proteger aplicações executadas por interpretadores chamados máquinas virtuais. Acerca dos conceitos relativos às técnicas de proteção do código fonte, assinale a alternativa correta.


  1. A ofuscação de código baseada em deslocamento de bits pode ser interpretada pelo interpretador ou compilador da linguagem de programação utilizada, sem prejuízo às respectivas funcionalidades.

  2. A criptografia e ofuscação de código é uma técnica aplicada após a compilação do programa, modificando o binário original, com o objetivo de protegê-lo de técnicas de cracking. Assim, apesar de impedir a engenharia reversa com um alto nível de proteção, a técnica tem custo muito elevado e é pouco aplicada.

  3. A técnica de eliminação de informação simbólica é uma técnica de ofuscação de código que remove informação sobre links simbólicos do software, tornando a engenharia reversa mais onerosa.

  4. Realizar a ofuscação do código geralmente tem um custo associado. Isso pode manifestar-se na forma de código maior, tempos de execução mais lentos ou consumo aumentado de memória em tempo de execução.

  5. Técnicas de criptografia de código que utilizam chaves elípticas assimétricas são altamente sofisticadas e realizam uma proteção completa do código das aplicações, mas dependem de trocas de chaves constantes em pontos remotos para que o carregador da aplicação funcione corretamente. É muito utilizada em jogos on-line.


2) [Ano: 2018, Banca: FAURGS, Órgão: BANRISUL, Prova: FAURGS - 2018 - BANRISUL - Segurança da Tecnologia da Informação] - Considere as afirmações abaixo sobre os diferentes tipos de códigos maliciosos.


I - Técnicas como ofuscação e polimorfismo são utilizadas por atacantes para dificultar a análise de um código malicioso. 

II - Um Spyware pode capturar dados bancários inseridos pelo usuário em um sistema comprometido. 

III - Ransomware é um tipo de código malicioso que exige pagamento de resgate para restabelecer o acesso de dados armazenados em um dispositivo. 

IV - Backdoor é um código malicioso que permite o retorno de um atacante a um sistema comprometido. 

V - RootKit é um código malicioso que tem por objetivo ocultar as atividades do invasor no sistema comprometido.


Quais estão corretas?


  1. Apenas III, IV e V.

  2. Apenas I, II, III e IV.

  3. Apenas I, II, IV e V.

  4. Apenas I, III, IV e V.

  5. I, II, III, IV e V.


3) [Instituto AOCP - Perito (ITEP RN)/Criminal/Computação/2021] - Sobre a engenharia reversa de código e suas aplicações, assinale a alternativa correta.


  1. Inclusão de mecanismos antidebug, encriptação e ofuscação de código são exemplos de abordagens contra engenharia reversa.

  2. É uma prática que tem como único objetivo a decompilação de programas para roubo de código fonte.

  3. Sua aplicação mais comum é em programas considerados softwares livres, uma vez que precisam ter seus códigos fontes relevados.

  4. Engenharia reversa é sempre um problema do ponto de vista da segurança da informação.

  5. Linguagens de alto nível orientadas a objeto são imunes a essa prática devido ao polimorfismo.


4) [CRBM - Técnico - Informática (2021)] - A segurança das redes de computadores é realizada por meio de diversas camadas de políticas e controles que são implementadas com o intuito de detectar, mitigar e prevenir ataques e ameaças ao ambiente computacional. Com relação às ameaças às redes de computadores e aos recursos de segurança que podem ser implementados, julgue o item.


Os softwares antivírus, ou antimalwares, trabalham ativamente para impedir que um malware infecte um computador. Entretanto, os malwares modernos utilizam-se de vários métodos para ocultar suas reais intenções, ocultando uma parte do código malicioso para evitar a detecção. Uma das formas por meio das quais um vírus faz isso chama-se ofuscação de código.


  1. Certo

  2. Errado


5 - [FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática, Disciplina: Engenharia de Software (TI)] - Em muitos casos, é desejável criar softwares com proteção contra reversão de código, ou seja, desenvolver programas que apliquem técnicas antiengenharia-reversa. Assinale a alternativa que apresenta somente exemplos dessas técnicas.


A) Transformações de dados, confusão de registradores, técnicas ativas de antidebugging.

B) Ofuscação de código, eliminação de informação simbólica, uso de árvores transversais.

C) Transformações no controle de fluxo, transformações de dados, ofuscação e encriptação de código.

D) Encriptação de código, bloqueio de acesso à memória, confusão de disassemblers.

E) Varredura linear recursiva, técnicas ativas de antidebugging, transformações no controle de fluxo.


Gabarito


1 - D / 2 - E / 3 - A / 4 - A / 5 - C

Referências


BASATWAR, G.  Code Obfuscation: A Comprehensive Guide Against Reverse-Engineering Attempts. AppSealing Blog. [S.I.] 2022. Disponível em: <https://www.appsealing.com/code-obfuscation/> Acesso em: 12 jan. 2022.


LUTKEVICH, B.  Obfuscation. TechTarget. [S.I.] [2022?]. Disponível em: <https://www.techtarget.com/searchsecurity/definition/obfuscation> Acesso em: 12 jan. 2022.


SCIRRA. Construct 2. [S.I] [2021?]. Disponível em: <https://www.construct.net/en/construct-2/download> Acesso em: 13 jan. 2022.


Técnicas de Recuperação de Arquivos Apagados

Fonte:  MaxP ixel.net Introdução A complexidade na recuperação de um arquivo excluído, seja de forma acidental ou não, depende da forma e, p...