UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO

Tamanho: px
Começar a partir da página:

Download "UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO"

Transcrição

1 UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO EXPLORANDO FALHAS DE SEGURANÇA EM SOFTWARE PEDRO ROURE MALTA DE SÁ GOIÂNIA 2007

2 UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO EXPLORANDO FALHAS DE SEGURANÇA EM SOFTWARE Trabalho de Projeto Final de Curso apresentado por Pedro Roure Malta de Sá à Universidade Católica de Goiás, como parte dos requisitos para a obtenção do título de Bacharel em Ciência da Computação aprovado em 07 / 12 / 2007 pela Banca examinadora: Professor Cláudio Martins Garcia, UCG Orientador Professor Ulisses Rodrigues Afonseca Professor Iwens Gervásio Sene Júnior

3 EXPLORANDO FALHAS DE SEGURANÇA EM SOFTWARE PEDRO ROURE MALTA DE SÁ Trabalho de Projeto Final de Curso apresentado por Pedro Roure Malta de Sá à Universidade Católica de Goiás, como parte dos requisitos para obtenção do título de Bacharel em Ciência da Computação. Professor Claúdio Garcia Orientador Professor Jeovah Martins Coordenador de Projeto Final de Curso

4 RESUMO De acordo com o CERT, a maior parte dos ataques realizados com sucessos resultam da exploração de vulnerabilidades em software conhecidas, cuja uma correção não foi desenvolvida e se foi desenvolvida não foi aplicada ao software, e devido a configurações inseguras do software, como opções de configurações padrões amplamente conhecidas pelos atacantes e que não são alteradas pelo administrador do sistema. Softwares devem ser desenvolvidos com a segurança deste em mente. É impossível desenvolver software que sejam totalmente ausente de falhas, no entanto, é possível minimizar a ocorrência destas no software e/ou minimizar o impacto que elas terão uma vez que foram encontradas. Vulnerabilidades em software podem ser introduzidas neste durante diferentes fases do ciclo de vida do software. No entanto, as fases mais comuns são: Design: Quando você esta pensando sobre o software. Implementação: Quando você está escrevendo a aplicação. Manutenção: Depois que a aplicação está em produção. Como uma regra geral, as vulnerabilidades em software mais difíceis de serem consertadas, são aquelas provenientes de decisões na fase de design do software. Por exemplo, vamos supor que durante o design de uma aplicação cliente-servidor que será utilizada para transferir dados sigilosos entre uma empresa matriz e suas filiais via Internet, o engenheiro de software opte por não utilizar nenhum tipo de criptografia ( nem para os dados, nem para

5 autenticação que permitira acesso ao sistema ). Essa decisão de design pode ter grandes impactos no futuro. Pois os dados que trafegarem pela rede poderam facilmente serem interceptados por um hacker, utilizando de um sniffer. Dependendo dos dados que são manipulados por essa aplicação, o prejuízo pode ser de milhares de dólares. Uma mudança nessa decisão de design ( a não utilizaçao de criptografia ) depois que esse software estivesse pronto, poderia exigir tantas alterações no software, inclusive na implementação deste, que talvez fosse necessário recomeçar todo o ciclo de desenvolvimento do software. As vulnerabilidades introduzidas durante a fase de implementação são as mais comuns de serem encontradas, e são dependentes da linguagem na qual a aplicação será escrita. O que implica que a escolha da linguagem na qual a aplicação será escrita, implicará na conjunto de técnicas utilizadas para exlorar vulnerabilidades introduzidas nesta fase. Vulnerabilidades também podem ser introduzidas no software mesmo depois que esse se encontra em operação, quando alterações são feitas a esse. São comuns os casos onde vulnerabilidades foram introduzidas no software durante a fase de manutenção do software, quando correções ( patches ) são aplicadas ao software. Ou seja, uma correção aplicada ao software com o intuito de corrigir uma vulnerabilidade existente acaba por introduzir uma outra vulnerabilidade. Ou seja, a segurança de um software não pode ser incorporada a este depois que este estiver pronto assim como se fosse um plugin. Para que um software seguro seja construído, a segurança deste deve ser pensada em todas as fases do ciclo de desenvolvimento do software, e mesmo depois que este for entrege e estiver em operação, quando manutenções forem feitas a este.

6 As vulnerabilidades introduzidas durante a fase de implementação é que serão o foco de nossos estudos. Mostraremos vulnerabilidades comuns de serem encontradas em aplicações escritas em linguagem C. Focaremos nas vulnerabilidades que permitem aos atacantes controlarem a execução da aplicação sendo explorada e possivelmente executar códigos arbitrários no sistema sendo atacado. No capítulo 1, mostraremos como o os códigos arbitrários que serão executados no sistema sendo atacado, uma vez que a execução da aplicação for controlada, são constrúidos pelos atacantes. Esses códigos arbitrários, são comumente chamados de shellcodes. No capítulo 2, mostraremos como algumas técnicas de programação segura e a utilização de firewalls podem ser usadas para evitar que shellcodes simples, como os mostrados no capítulo 1, sejam inseridos e executados com sucesso no sistema sendo atacado. Mostraremos também técnicas mais avançadas para escrita de shellcodes, que podem ser usadas para burlar as técnicas de programação descritas e a proteção oferecida por firewalls. No capítulo 3, falaremos sobre estouro de buffer, um tipo comum de vulnerabilidade de implementação encontrada em aplicações escritas em linguagem C. Estouros de buffer podem ocorrer em diferentes áreas de memória no espaço de endereçamento do processo, discutiremos técnicas para exploração de vulnerabilidades de estouro de buffer que ocorrem na área de pilha e heap do processo. Mostraremos também alguns avanços nessa área, tanto por parte da comunidade de segurança, quanto por parte dos atacantes. Palavras-Chave: Shellcode, Exploits, Estouro de Buffer, Estouro de Pilha, Estouro de Heap, Segurança em Software.

7 ABSTRACT In accordance with the CERT, most of the attacks carried through with successes results of the exploration of vulnerabilities in software known, whose a correction was not developed and if it was developed was not applied to software, and had the unsafe configurations of software, as standard configurations options widely known by the aggressors and that they are not modified by the system administrator. Softwares must be developed with the security of this in mind. It is impossible to develop software that is total absent of flaws, however, it is possible to minimize the occurrence of these in software and/or to minimize the impact that they will have a time that they had been found. Vulnerabilities in software can be introduced in this during different phases of the software life cycle. However, the phases most common are: Design: When you are thinking about the software. Implementation: When you are writing the application. Maintenance: Later that the application is in production. As a general rule, the most difficult vulnerabilities in software to be fixed, are those proceeding from decisions in the phase of design of software. For example, we go to assume that during design of an application client-server who will be used to transfer secret data between a first company and its branch offices using Internet, the software engineer opts to

8 not using no type of cryptography (nor for the data, nor for authentication that allows access to the system). This decision of design can have great impacts in the future. Because the data that pass through the network could be easily be intercepted for hacker, using a sniffer. Depending of the data that are manipulated by this application, the damage can be of thousand of dollars. A change in this design decision (the no use of cryptography) later that this software was ready, could demand as many alterations in the software, also in the implementation of this, that perhaps was necessary to recommence all the software development cycle. The vulnerabilities introduced during the implementation phase are most common to be joined, and are dependents of the language in which the application will be written. What it implies that the choice of the language in which the application will be written, will imply in the set of used techniques to explore vulnerabilities introduced in this phase. Vulnerabilities also can be introduced in the same software later that this if finds in operation, when alterations are made to this. It is common to happen cases where vulnerabilities had been introduced in software during the phase of maintenance of software, when corrections (patches) are applied to software. That is, a correction applied to software with intention to correct an existing vulnerability finishes for introducing one another vulnerability. That is, the security of a software cannot be incorporated later when the job is done as it was a plugin. So that a safe software is constructed, the security of this must be thought about all the phases of the software development cycle, and same later that this will be entrege and be in operation, when maintenances will be made to this. To write a secure software, the

9 security of this must be thought in all the phases of the cycle of the development of the software, even when the software is delivered and in operation when maintenances will be made to this. The vulnerabilities introduced during the implementation phase is what will be the focus of our studies. We will show common vulnerabilities to be joined in applications written in language C. We Will focus in the vulnerabilities that allows the hackers to control the execution of the application being explored and to execute arbitrary codes in the attacked system being been. In chapter 1, we will show how the arbitrary codes that will be executed in the attacked system, once the execution of the application will be controlled, are constructed by the hackers. These arbitrary codes, are often called shellcodes. In chapter 2, we will show how some techniques of safe programming and the use of firewalls can be used to prevent that simple shellcodes, as the shown in chapter 1, can be inserted and executed successfully in the attacked system. We will also show more advanced techniques for writing of shellcodes, that they can be used to dupe the described techniques of programming and the protection offered for firewalls. In chapter 3, we will speak about buffer overflow, a common type of vulnerability of implementation found in applications written in language C. Buffers overflow can occur in different areas of memory in the addressing space of the process, we will argue techniques for exploration of vulnerabilities of buffer overflow that occur in the stack area and heap of the process. We will also show some advances in this area, as much on the part of the security community, how much on the part of the hackers.

10 Keywords: Shellcode, Exploits, Buffer Overflow, Stack Overflow, Heap Overflow, Software Security.

11 EXPLORANDO FALHAS DE SEGURANÇA EM SOFTWARE SUMÁRIO 1. SHELLCODE BÁSICO INTRODUÇÃO BÁSICO DE ASSEMBLER REGISTRADORES CHAMADAS DE SISTEMA BÁSICO DE SHELLCODE PROBLEMA DO ENDEREÇAMENTO TÉCNICA DO JUMP E CALL USANDO A PILHA PROBLEMA DOS BYTES NULOS ESCREVENDO SHELLCODES ESCREVENDO UMA MENSAGEM NA TELA REINICIANDO O SISTEMA OBTENDO UM SHELL LOCALMENTE OBTENDO UM SHELL REMOTAMENTE ENCONTRANDO O SHELLCODE SHELLCODE AVANÇADO ESCREVENDO PROGRAMAS SEGUROS MINIMIZANDO PRIVILÉGIOS USUÁRIOS GRUPOS E PROCESSOS PROGRAMAS SET-UID E SET-GID PRINCÍPIO DO MENOR PRIVILÉGIO CHAMADAS DE SISTEMAS RELACIONADAS RESTAURANDO PRIVILÉGIOS TEMPORARIAMENTE RETIRADOS 26

12 LIMITANDO OS ARQUIVOS DO SISTEMA VISIVEIS PELO PROCESSO QUEBRANDO UMA CHROOT USANDO A SYS_CHROOT DE FORMA SEGURA VALIDAÇÃO DE ENTRADA CENÁRIO CENÁRIO BLOQUEANDO SHELLCODES NA REDE FIREWALLS O QUE É UM FIREWALL FIREWALLS E O LINUX NETFILER E IPTABLES ESCOLHENDO UMA POLÍTICA PADRÃO BLOQUEANDO SHELLCODES COM FIREWALLS CENÁRIO CENÁRIO CENÁRIO CENÁRIO CENÁRIO ESTOURO DE BUFFER PRINCIPAIS CAUSAS ESPAÇO DE ENDEREÇAMENTO DE UM PROCESSO CÓDIGO DADOS INICIALIZADOS DADOS NÃO-INICIALIZADOS HEAP PILHA TIPOS DE ESTOURO DE BUFFER HISTÓRICO ESTOURO DE PILHA CHAMADAS DE PROCEDIMENTO VARIÁVEIS LOCAIS E PARÂMETROS DE UM PROCEDIMENTO 59

13 COLOCANDO TUDO EM PRÁTICA LIBSAFE LIBVERIFY STACKGUARD POINTER SUBTERFUGE ALTERANDO PONTEIROS NOS ARGUMENTOS DE UMA FUNÇÃO ALTERANDO PONTEIROS PARA FUNÇÕES ALTERANDO PONTEIROS PARA DADOS STACK SMASH PROTECTOR ( SSP ) ESTOURO DE HEAP ALOCADOR DE MEMÓRIA DINÂMICA NO LINUX: DOUG LEA MALLOC CHUNKS DE MEMÓRIA BOUNDARY TAGS CAMPO SIZE BINS ADICIONANDO E REMOVENDO CHUNKS DE UMA BIN EXPLORANDO A MACRO UNLINK() SEÇÃO.DTORS GLIBC CONCLUSÃO REFERÊNCIAS BIBLIOGRAFICAS ANEXOS EXPLOIT PARA ESTOURO DE PILHA 101

14 LISTA DE FIGURAS Figura 1.1 Técnica do Jump e Call 04 Figura 1.2 Usando a Pilha Figura 1.3 Usando a Pilha Figura 1.4 Arquivo - write-push.s 08 Figura 1.5 Arquivo - test-write-push.c 09 Figura 1.6 Arquivo - reboot.s 11 Figura 1.7 Arquivo - test-reboot.c 11 Figura 1.8 Arquivo - execve-push.s 13 Figura 1.9 Arquivo - port-bind.s 15 Figura 1.10 Arquivo - test-port-bind.c 17 Figura 1.11 Seção NOP Sled Tradicional 19 Figura 2.1 Arquivo - test-setuid.c 24 Figura 2.2 Arquivo - setuid-execve.s 27 Figura 2.3 Arquivo - break-chroot1.c 29 Figura 2.4 Arquivo: break-chroot2.c 30 Figura 2.5 Arquivo test-toupper.c 35 Figura 2.6 Arquivo - execve-iptables.s 40 Figura 2.7 Arquivo - connect-back.s 42 Figura 2.8 Arquivo - test-connect-back.c 43 Figura 2.9 Arquivo port-bind-fork-stop.s 49 Figura 2.10 Arquivo - test-port-bind-fork.c 51 Figura 3.1 Espaço de Endereçamento de Um Processo 56 Figura 3.2 Protótipo das Instruções CALL e RET 59 Figura Arquivo vuln-buf.c 60 Figura 3.4 Estado da Pilha Durante a Chamada de um Procedimento 61 Figura 3.5 Arquivo - vuln-buf.c - Modificado 65 Figura 3.6 Estado da Pilha Durante a Chamada de um Procedimento Aplicação Protegida Pelo StackGuard 70

15 Figura 3.7 Funções do GCC Alterados pelo StackGuard 71 Figura 3.8 Arquivo pointer-subterfuge1.c 73 Figura 3.9 Arquivo pointer-subterfuge2.c 74 Figura 3.10 Arquivo heap1.c 77 Figura 3.11 Boundary Tag de um Chunk 80 Figura 3.12 Chunk de Memória Alocado 80 Figura 3.13 Chunk de Memória Livre 81 Figura 3.14 Macro Unlink() 85 Figura 3.15 Macro Frontlink() 85 Figura 3.16 Arquivo heap2.c 87 Figura 3.17 Buffer Utilizado Para Estourar buff1 89 Figura 3.18 Figura 3.18 Arquivo exploit_malloc.c 90

16 LISTA DE TABELAS Tabela 1 Subdivisões dos registradores EAX, EBX, ECX e EDX 02 Tabela 2 Chamadas de Sistema SYS_EXIT e SYS_WRITE Tabela 3 Chamadas de Sistema SYS_EXIT e SYS_WRITE Tabela 4 Chamadas de Sistema SYS_SYNC e SYS_REBOOT 1 10 Tabela 5 Chamadas de Sistema SYS_SYNC e SYS_REBOOT 2 10 Tabela 6 Opções de Ações Para SYS_REBOOT 10 Tabela 7 Chamadas de Sistema SYS_EXECVE 1 12 Tabela 8 Chamadas de Sistema SYS_EXECVE 2 12 Tabela 9 Chamadas de Sistema SYS_SOCKETCALL 1 14 Tabela 10 Chamadas de Sistema SYS_SOCKETCALL 2 14 Tabela 11 Sub-funções da Chamada de Sistema SYS_SOCKETCALL 14 Tabela 12 Chamadas de Sistema SYS_DUP Tabela 13 Chamadas de Sistema SYS_DUP Tabela 14 Minimização de Privilégios Chamadas de Sistemas 23 Tabela 15 Limitando os arquivos do sistema visíveis pelo processo Chamadas de Sistemas 28 Tabela 16 Chamadas de Sistema SYS_FORK 1 47 Tabela 17 Chamadas de Sistema SYS_FORK 2 48 Tabela 18 Sub-função SYS_SETSOCKOPT 48

17 1 CAPÍTULO 1 Shellcode Básico 1.1 Introdução Shellcode corresponde a um conjunto de instruções de máquina, normalmente, sem conter bytes NULOS que será inserido no espaço de memória de um processo em tempo de execução. Uma vez que, não é possível se determinar exatamente onde o shellcode se encontrara na memória, este deve ser escrito como um código de maquina independente de posição (PIC Position Independent Code). A técnica de escrita de shellcodes tem de desenvolvido bastante nos últimos anos, e isso se deve principalmente aos avanços concorrentes nas técnicas para impedir que shellcodes possam ser inseridos e executados em programas. O nome shellcode foi dado inicialmente, devido ao fato de que normalmente essas instruções visavam obter uma Shell (interpretador de comandos) no sistema sendo atacado, no entanto, essas instruções podem executar praticamente qualquer tarefa no sistema sendo atacado. Ataques de corrupção de memória que objetivam o ganho sobre o controle da execução do programa quando bem sucedidos fazem o uso do shellcode para executarem instruções no alvo comprometido com permissões do usuário sobre o qual o processo estava sendo executado. De forma geral, quando conseguimos controlar a execução do programa devemos desviar a execução deste para o nosso shellcode. Uma exceção a regra, é quando desviamos a execução do programa para instruções já se encontram na memória do processo, nesse caso o uso de shellcode não é necessário. 1.2 Básico de Assembler Os shellcodes aqui trabalhados serão escritos em Assembler, e posteriormente terão seus opcodes extraídos para então poderem ser utilizados. Introduziremos apenas os conceitos básicos necessários para escritas de nossos shellcodes. Conhecimentos avançados de Assembler serão introduzidos à medida que nossos shellcodes forem se tornando mais complexos. Uma vez que o shellcode é escrito em assembler, podemos concluir que este é

18 2 dependente da arquitetura sobre a qual o sistema está sendo executado, uma vez que o conjunto de instruções disponíveis é diferente entre arquiteturas diferentes. Nos concentraremos em shellcodes para a arquitetura x Registradores Os processadores Intel x86 possuem oito registradores de propósito geral de 32 bits. Apesar de serem chamados de registradores de propósito geral, algumas tarefas são especificas de cada um e não podem ser realizadas por nenhum outro. O uso correto desses registradores é que tornam os shellcodes eficientes e otimizados, veremos por exemplo, que o uso de registradores menores diminuem o tamanho do shellcode e evitam bytes NULOS em nosso shellcode. Desses oito registradores, os registradores EAX, EBX, ECX e EDX possuem subdivisões de 16 bits e 8 bits, como mostrado na tabela abaixo: 32 Bits 16 Bits 8 Bits ( Alto ) 8 Bits ( Baixo) EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX DH DL Tabela 1 Subdivisões dos registradores EAX, EBX, ECX e EDX Os registradores EAX, AX, AH, AL são conhecidos como acumuladores, esses são utilizados principalmente em cálculos, muitas operações implicitamente fazem uso desses registradores, como por exemplo a instrução MUL que realiza uma multiplicação nãosinalizada do valor contido em um dos registradores EAX, AX, AL, com o valor de um operando que é passado para instrução. Esses registradores também são utilizados para armazenar o numero de uma chamada do sistema quando necessitamos de um recurso do kernel. Os registradores EBX, BX, BH, BL são conhecidos como registradores base. Normalmente, eles são utilizados para armazenar ponteiros. Os registradores ECX, CX, CH, CL são conhecidos como contadores, eles são utilizados implicitamente por instruções que realizam loops como, LOOP, LOOPZ, e

19 3 LOOPNZ. Os registradores EDX, DX, DH, DL são conhecidos como registradores de dados, eles são utilizados em conjunto com os registradores acumuladores em instruções como MUL. Após uma instrução MUL a parte dos bits mais significativos do resultado é armazenado nesses registradores e a parte menos significativa é armazenada nos registradores acumuladores. O registrador ESP é utilizado para armazenar o topo da pilha. O registrador EBP é utilizado para armazenar o endereço do stack frame corrente. O registrador ESI e EDI são utilizados respectivamente como índices de origem e destino quando estamos trabalhando com strings. 1.3 Chamadas de Sistema Os processadores Intel x86 possuem 4 níveis de proteção, o nível 0 é nível de maior privilégios, também conhecido como modo supervisor, onde todas as instruções estão disponíveis ( incluindo instruções privilegiadas ), no Linux o kernel executa com este nível de proteção, enquanto os programas de usuários executam no nível 3, que é o nível com menor privilégios, onde certas instruções não estão disponíveis. Essa separação entre modo usuário e modo kernel utilizando-se de níveis do processador teve por objetivo tornar o sistema mais seguro e confiável, evitando que problemas em programas de usuários pudessem parar todo o sistema. Quando programas em modo usuário precisam acessar recursos de baixo nível oferecidos pelo kernel isso deve ser feito por meio de uma chamada de sistema. Normalmente, chamadas de sistemas não são realizadas diretamente por um processo, bibliotecas em C é que oferecem esse recurso, no Linux a glibc é que oferece funções para acesso a chamadas de sistema. Em arquiteturas x86 o Linux implementa as chamadas de sistemas usando interrupções de software. Para executar uma chamada de sistema o processo em modo usuário deve colocar o numero desta no registrador EAX e seus respectivos parâmetros nos demais registradores de propósito geral (EBX, ECX, EDX, ESI, EDI) e executar int 0x80. O funcionamento das chamadas de sistemas e seus respectivos números é dependente do sistema operacional em questão. Por exemplo, no FreeBSD os parâmetros devem ser

20 4 passados na pilha e exige-se a interrupção seja chamada dentro de outra rotina. Como vimos no Linux os parâmetros para a chamada de sistema são passados nos registradores de propósito geral. Chamadas de sistemas são fornecidas pelo kernel do sistema operacional, o que implica que diferentes sistemas operacionais possuem diferentes conjuntos de chamadas de sistemas e formas de a utilizá-las. 1.4 Básico de Shellcode Usaremos o NASM (Netwide Assembler), para montar nosso shellcode, e então, usaremos o NDISASM (Netwide Disassembler) para extrair os opcodes em hexadecimal. Quando desenvolvendo shellcodes usaremos chamadas de sistemas, não podemos usar funções de bibliotecas externas, pois o endereço destas são resolvidos dinamicamente, em tempo de ligação (compilação estática) ou em tempo de execução (usando bibliotecas compartilhadas). Estaremos desenvolvendo shellcodes para sistemas Linux em arquiteturas x Problema do Endereçamento Quando escrevemos shellcode muitas vezes será necessário fazer referências à strings e ponteiros, porém não é possível utilizar nomes de variáveis, muito menos endereços estáticos, pois como dissemos anteriormente, o shellcode deve ser um código de maquina independente de posição e que será inserido em tempo de execução. Existem duas técnicas que podem ser utilizadas Técnica do JUMP e CALL Está técnica explora o funcionamento das instruções JMP e CALL. Analisemos o código a seguir: 1: jmp short data 2: code: 3: pop esi

21 5.. 8: data: 9: call code db 'Hello World#' Figura 1.1: Técnica do Jump e Call Na linha 1 fazemos o desvio para o rótulo data ( linha 8), logo em seguida chamados a rotina code ( linha 9 ), quando chamamos essa rotina o endereço correspondente a instrução seguinte é colocada na pilha, esse endereço corresponde ao da string. Dentro da rotina code, usamos a instrução pop esi, para obtermos o endereço da string, que agora se encontra no registrador ESI. Podemos então trabalhar com a string utilizando o registrador ESI como um ponteiro para ela Usando a PILHA O problema da técnica descrita acima é que ela pode tornar o shellcode imenso, e o tamanho do shellcode é um fator importante quando o espaço em que o shellcode será inserido é relativamente pequeno. Para contornarmos esse problema usamos a pilha para armazenar as strings e ponteiros que utilizaremos em nosso shellcode. Veja o exemplo a seguir: push byte 0x00 push 0x21646c72 push 0x6f57206f push 0x6c6c6548 mov ecx, esp Figura 1.2 Usando a Pilha - 1 Repare que primeiramente inserimos um byte NULO que será o terminador da string, depois colocamos a string na pilha usando a instrução PUSH. Observe que a string é colocada em sua ordem inversa, isso se deve ao funcionamento da pilha. O problema do código acima é que a instrução em negrito leva à presença de um byte NULO em nosso shellcode e como

22 veremos em seguida isso pode impedir que o shellcode seja inserido corretamente no programa. Para resolver o problema, modificamos o nosso shellcode para: 6 xor eax, eax push eax push 0x21646c72 push 0x6f57206f push 0x6c6c6548 mov ecx, esp Figura 1.3 Usando a Pilha - 2 Observe, em ambos os casos que na última instrução ( mov ecx, esp ) o registrador ECX passa a armazenar o ponteiro para string Problema dos bytes NULOS Normalmente, o nosso shellcode será inserido no programa através de alguma função que faz manipulação de strings, essas funções normalmente param de processar a string quando um byte NULO é encontrado, pois este é considerado o delimitador de fim da string. Para evitarmos a presença de bytes NULOS alguns cuidados devem ser tomados. Seguem alguns exemplos: 1. Quando queremos zerar um registrador devemos usar a instrução XOR, ao invés da instrução MOV. Por exemplo, a instrução mov eax,0x0 coloca 4 bytes NULOS em nosso shellcode, enquanto a instrução xor eax,eax evita a presença destes. 2. Devemos evitar mover um valor pequeno para dentro de registradores grandes ( 32 bits ). Por exemplo, a instrução mov eax,0x01 coloca 3 bytes NULOS em nosso shellcode, enquanto a instrução as instruções xor eax,eax e mov al,0x01 tem o mesmo efeito mas sem colocar bytes nulos em nosso shellcode. 3. Normalmente, quando definimos uma string em Assembler fazemos da seguinte forma: db 'Hello World', 0x00 O problema é que desta forma um byte nulo será inserido no shellcode. O correto

23 7 seria: db 'Hello World#', e quando obtivermos o endereço da string ( como demonstrado acima ), nós zeramos o sustenido, xor eax,eax mov byte [esi + 11],al 1.5 Escrevendo Shellcodes Nesta seção serão vistos quatro exemplos básicos de shellcodes. O primeiro apenas escreverá uma mensagem na tela, o segundo se executado com privilégios de super-usuário reiniciará o sistema, o terceiro obterá uma shell no sistema quando usado localmente e o quarto obterá uma shell remota em um sistema. Shellcodes avançados serão discutidos no Capitulo Escrevendo uma mensagem na tela Para escrevermos uma mensagem na tela usaremos duas chamadas de sistema: sys_exit e sys_write. Analisemos a sintaxe de cada chamada de sistema, para entendermos como os parâmetros devem ser passados. Nome sys_exit sys_write Sintaxe int sys_exit(int status) ssize_t sys_write(unsigned int fd, const char * buf, size_t count) Tabela 2 Chamadas de Sistema SYS_EXIT e SYS_WRITE - 1 sistema: Agora, vamos ver como esses parâmetros devem ser passados para a chamada de Nome EAX EBX ECX EDX sys_exit 1 int status - - sys_write 4 unsigned int const char * size_t

24 8 Tabela 3 Chamadas de Sistema SYS_EXIT e SYS_WRITE - 2 seguir: O nosso shellcode escreverá a mensagem Hello World! na tela. Veja o shellcode a BITS 32 xor eax,eax ; EAX = 0 xor ebx,ebx ; EBX = 0 xor ecx,ecx ; ECX = 0 xor edx,edx ; EDX = 0 mov al,0x0a ; AL = \n push word ax ; Inserimos o terminador da string push 0x21646c72 ;!dlr push 0x6f57206f ; ow o push 0x6c6c6548 ; lleh mov ecx,esp ; ECX = Ponteiro para string mov bl,1 ; BL = STDOUT mov dl,13 ; DL = Tamanho da String mov al,4 ; sys_write int 0x80 dec bl ; BL = status = 0 mov al,1 ; sys_exit int 0x80 Figura 1.4 Arquivo - write-push.s #nasm -o write-push write-push.s #ndisasm -u./write-push C0 xor eax,eax DB xor ebx,ebx C9 xor ecx,ecx D2 xor edx,edx B00A mov al,0xa A 6650 push ax C 68726C6421 push dword 0x21646c F20576F push dword 0x6f57206f C6C push dword 0x6c6c B 89E1 mov ecx,esp D B301 mov bl,0x1

25 F B20D mov dl,0xd B004 mov al,0x CD80 int 0x FECB dec bl B001 mov al,0x CD80 int 0x80 ficaria: Agora podemos extrair os opcodes referentes a cada instrução e o nosso shellcode "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x0a\x66\x50\x68\x72\x6c" "\x64\x21\x68\x6f\x20\x57\x6f\x68\x48\x65\x6c\x6c\x89\xe1\xb3" "\x01\xb2\x0d\xb0\x04\xcd\x80\xfe\xcb\xb0\x01\xcd\x80" Agora vamos testar nosso shellcode: char shellcode[] = "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x0a\x66\x50\x68\x72\x6c" "\x64\x21\x68\x6f\x20\x57\x6f\x68\x48\x65\x6c\x6c\x89\xe1\xb3" "\x01\xb2\x0d\xb0\x04\xcd\x80\xfe\xcb\xb0\x01\xcd\x80"; int main(void) { void (*func)(void); func = (void (*)(void))shellcode; (*func)(); } Figura 1.5 Arquivo - test-write-push.c #gcc test-write-push.c -o test-write-push #./test-write-push Hello World! # Reiniciando o Sistema Esse shellcode usa duas chamadas de sistemas: sys_sync e sys_reboot. A sys_sync é utilizada para forçar o sincronismo do sistema de arquivos no disco rígido com o estado

26 10 interno do sistema de arquivos, utilizaremos essa chamada de sistema para evitar perda de dados quando o sistema for reiniciado com a chamada de sistema sys_reboot. A sys_reboot pode ser usada tanto para reiniciar o sistema, quanto para habilitar/desabilitar o Ctrl+Alt+Del no sistema. Veja a sintaxe de ambas as chamadas de sistema a seguir: Nome Sintaxe sys_sync int sys_sync(void); sys_reboot int sys_reboot(int magic, int magic_too, int flag) Tabela 4 Chamadas de Sistema SYS_SYNC e SYS_REBOOT - 1 sistema: Agora, vamos ver como esses parâmetros devem ser passados para a chamada de Nome EAX EBX ECX EDX sys_sync sys_reboot 88 int int int Tabela 5 Chamadas de Sistema SYS_SYNC e SYS_REBOOT - 2 A página de manual da chamada de sistema sys_reboot especifica que magic e magic_too devem obrigatoriamente ter os respectivos valores, 0xfee1dead e Se as duas variáveis estiverem corretamente configuradas a variável flag especifica qual ação será realizada. Os possíveis valores para a variável flag podem ser: Flag Ação 0x Reinicia o sistema 0x89abcdef Ctrl+Alt+Del é habilitado 0 Ctrl+Alt+Del é desabilitado e um sinal é enviado para init. Tabela 6 Opções de Ações Para SYS_REBOOT Então, vamos escrever nosso shellcode.

How to write Shellcodes por Luiz Fernando Camargo

How to write Shellcodes por Luiz Fernando Camargo How to write Shellcodes por Luiz Fernando Camargo 1. Introdução Shellcode é um grupo de instruções assembler em formato de opcode para realizar diversas funções como chamar uma shell, ou escutar em uma

Leia mais

http://www.risesecurity.org Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org

http://www.risesecurity.org Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org Ataques Polimórficos Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org A idéia - Detectores de intrusos utilizam-se de assinaturas de ataques para identificação dos mesmos - Sistemas

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as

Leia mais

Operador de Computador. Informática Básica

Operador de Computador. Informática Básica Operador de Computador Informática Básica Instalação de Software e Periféricos Podemos ter diversos tipos de software que nos auxiliam no desenvolvimento das nossas tarefas diárias, seja ela em casa, no

Leia mais

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança 3 SERVIÇOS IP 3.1 Serviços IP e alguns aspectos de segurança Os serviços IP's são suscetíveis a uma variedade de possíveis ataques, desde ataques passivos (como espionagem) até ataques ativos (como a impossibilidade

Leia mais

INTRODUÇÃO BUFFER OVERFLOWS

INTRODUÇÃO BUFFER OVERFLOWS BUFFER OVERFLOW INTRODUÇÃO As vulnerabilidades de buffer overflow são consideradas ameaças críticas de segurança, apesar de ser uma falha bem-conhecida e bastante séria, que se origina exclusivamente na

Leia mais

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1 TUTORIAL PRÁTICO SOBRE Git por Djalma Oliveira Versão 1.1 "Git é um sistema de controle de revisão distribuida, rápido e escalável" (tradução rápida do manual). Basicamente é

Leia mais

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2

Leia mais

Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto das Instruções Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Fluxo Seqüencial de Controle e Desvios (1) Fluxo de Controle: É a seqüência na qual instruções são dinamicamente executadas Isto

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação

Leia mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

Leia mais

Laboratório de Redes de Computadores e Sistemas Operacionais

Laboratório de Redes de Computadores e Sistemas Operacionais Laboratório de Redes de Computadores e Sistemas Operacionais Poderes da Conta Root Fabricio Breve Introdução Todo processo e arquivo em um sistema Linux pertence a uma conta de usuário em particular Os

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas Operacionais Prof. Marcelo Sabaris Carballo Pinto Gerenciamento de Dispositivos Gerenciamento de Dispositivos de E/S Introdução Gerenciador de Dispositivos Todos os dispositivos

Leia mais

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER V14 de BricsCAD vem com um novo sistema de licenciamento, com base na tecnologia de licenciamento de Reprise Software. Este novo sistema oferece um ambiente

Leia mais

Curso de Informática Básica

Curso de Informática Básica Curso de Informática Básica O e-mail Primeiros Cliques 1 Curso de Informática Básica Índice Introdução...3 Receber, enviar e responder mensagens...3 Anexando arquivos...9 Cuidado com vírus...11 2 Outlook

Leia mais

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32 Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32 Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007 CHIP Ano MHz Transistors Mem 8086 1978 5

Leia mais

Evolução dos Processadores

Evolução dos Processadores Evolução dos Processadores Arquitetura Intel Arquitetura x86 Micro Arquitetura P5 P6 NetBurst Core Processador Pentium Pentium Pro Pentium II Pentium III Pentium 4 Pentium D Xeon Xeon Sequence Core 2 Duo

Leia mais

Gerenciador de Boot Simples

Gerenciador de Boot Simples Gerenciador de Boot Simples Este tutorial é uma simples caminhada através de um Gerenciador de Boot Hello World. Este, como qualquer outro gestor, tem que obedecer a algumas regras. Termos utilizados:

Leia mais

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Procedimentos para Reinstalação do Sisloc

Procedimentos para Reinstalação do Sisloc Procedimentos para Reinstalação do Sisloc Sumário: 1. Informações Gerais... 3 2. Criação de backups importantes... 3 3. Reinstalação do Sisloc... 4 Passo a passo... 4 4. Instalação da base de dados Sisloc...

Leia mais

Manual SAGe Versão 1.2 (a partir da versão 12.08.01)

Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação

Leia mais

UDPcast Clonagem de HDs via rede utilizando

UDPcast Clonagem de HDs via rede utilizando Manual Clonando Discos com o UDPcast Clonagem de HDs via rede utilizando o UDPCast. Produzido por: Sergio Graças Giany Abreu Desenvolvedores do Projeto GNU/Linux VRlivre Manual Clonando Discos com o UDPcast

Leia mais

Visão Geral de Sistemas Operacionais

Visão Geral de Sistemas Operacionais Visão Geral de Sistemas Operacionais Sumário Um sistema operacional é um intermediário entre usuários e o hardware do computador. Desta forma, o usuário pode executar programas de forma conveniente e eficiente.

Leia mais

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro Programação Concorrente em Linux O Conceito de Processo no Linux O conceito de processo é fundamental para qualquer sistema operacional

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Conceitos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Introdução Arquitetura de Sistema Operacional Chamadas de sistema. Processos Basicamente, um

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

Leia mais

ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL

ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL Documento: Tutorial Autor: Iuri Sonego Cardoso Data: 27/05/2005 E-mail: iuri@scripthome.cjb.net Home Page: http://www.scripthome.cjb.net ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL

Leia mais

Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto

Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 Protocolo de rede... 3 Protocolo TCP/IP... 3 Máscara de sub-rede... 3 Hostname... 3

Leia mais

Figura 01 Kernel de um Sistema Operacional

Figura 01 Kernel de um Sistema Operacional 01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações

Leia mais

Arquitetura de Computadores. Tipos de Instruções

Arquitetura de Computadores. Tipos de Instruções Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada

Leia mais

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 1 Sumário 1 - Instalação Normal do Despachante Express... 3 2 - Instalação do Despachante Express em Rede... 5 3 - Registrando o Despachante Express...

Leia mais

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM ÍNDICE ITEM Página 1. Objetivo... 3 2. Requisitos... 3 3. Diretório do Millennium... 3 4. Procedimento para Transferência de Servidor... 3 4.1 Compartilhamento

Leia mais

Procedimentos para Instalação do Sisloc

Procedimentos para Instalação do Sisloc Procedimentos para Instalação do Sisloc Sumário: 1. Informações Gerais... 3 2. Instalação do Sisloc... 3 Passo a passo... 3 3. Instalação da base de dados Sisloc... 16 Passo a passo... 16 4. Instalação

Leia mais

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO 10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO UMA DAS GRANDES FUNÇÕES DA TECNOLOGIA É A DE FACILITAR A VIDA DO HOMEM, SEJA NA VIDA PESSOAL OU CORPORATIVA. ATRAVÉS DELA, ELE CONSEGUE

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim Conceitos de Sistemas Operacionais: Chamadas de Sistema Prof Rafael J. Sandim Conceitos de Sistema Operacional Interface entre o SO e os Programas de usuário é definida pelo conjunto de instruções estendidas

Leia mais

Tutorial: Programando no Linux

Tutorial: Programando no Linux UECE Universidade Estadual do Ceará CCT Centro de Ciências e Tecnologia Curso de Ciência da Computação Tutorial: Programando no Linux Alunos: Henrique Neto e João Gonçalves Professora: Ana Luiza E-mails:

Leia mais

MC404 - Organização de Computadores. e Linguagem de Montagem Instituto de Computação. Universidade Estadual de Campinas

MC404 - Organização de Computadores. e Linguagem de Montagem Instituto de Computação. Universidade Estadual de Campinas MC404 - Organização de Computadores Lab. e Linguagem de Montagem Instituto de Computação 01 Universidade Estadual de Campinas 1 Objetivo O objetivo deste laboratório é fazer com que o aluno se familiarize

Leia mais

Persistência de Dados

Persistência de Dados Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD

Leia mais

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM ÍNDICE ITEM Página 1. Objetivo... 3 2. Requisitos... 3 3. Diretório do Slim... 3 4. Procedimento para Transferência de Servidor... 3 4.1 Compartilhamento da

Leia mais

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. Data: 14/8 Página 1 de 9 Primeiros passos Introdução Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++. No tutorial anterior, mostramos como

Leia mais

UNIVERSIDADE FEDERAL DE PELOTAS

UNIVERSIDADE FEDERAL DE PELOTAS Usando um firewall para ajudar a proteger o computador A conexão à Internet pode representar um perigo para o usuário de computador desatento. Um firewall ajuda a proteger o computador impedindo que usuários

Leia mais

Experimentos com a memória cache do CPU

Experimentos com a memória cache do CPU Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de 2010 1 Contents 1 Introdução 3 2 Desvendando o cache 3 2.1 Para que serve o cache?.....................

Leia mais

FTP Protocolo de Transferência de Arquivos

FTP Protocolo de Transferência de Arquivos FTP Protocolo de Transferência de Arquivos IFSC UNIDADE DE SÃO JOSÉ CURSO TÉCNICO SUBSEQUENTE DE TELECOMUNICAÇÕES! Prof. Tomás Grimm FTP - Protocolo O protocolo FTP é o serviço padrão da Internet para

Leia mais

Segurança de Acesso a Banco de Dados no MS SQL Server

Segurança de Acesso a Banco de Dados no MS SQL Server Segurança de Acesso a Banco de Dados no MS SQL Server Para efetuar com sucesso os exemplos que serão mostrados a seguir é necessário que exista no SQL Server uma pessoa que se conecte como Administrador,

Leia mais

ULA Sinais de Controle enviados pela UC

ULA Sinais de Controle enviados pela UC Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento

Leia mais

Manual de Utilização do Sistema GRServer Cam on-line (Gerenciamento de Câmeras On-line)

Manual de Utilização do Sistema GRServer Cam on-line (Gerenciamento de Câmeras On-line) Manual de Utilização do Sistema GRServer Cam on-line (Gerenciamento de Câmeras On-line) Criamos, desenvolvemos e aperfeiçoamos ferramentas que tragam a nossos parceiros e clientes grandes oportunidades

Leia mais

Sistemas Operacionais. Conceitos de um Sistema Operacional

Sistemas Operacionais. Conceitos de um Sistema Operacional Sistemas Operacionais Conceitos de um Sistema Operacional Modo usuário e Modo Kernel Como já vimos são ambientes de execução diferentes no processador Há um conjunto de funções privilegiadas acessadas

Leia mais

Firewall. Qual a utilidade em instalar um firewall pessoal?

Firewall. Qual a utilidade em instalar um firewall pessoal? Firewall Significado: Firewall em português é o mesmo que parede cortafogo, um tipo de parede, utilizada principalmente em prédios, que contém o fogo em casos de incêndio. O firewall da informática faz

Leia mais

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos MÓDULO 7 Modelo OSI A maioria das redes são organizadas como pilhas ou níveis de camadas, umas sobre as outras, sendo feito com o intuito de reduzir a complexidade do projeto da rede. O objetivo de cada

Leia mais

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

ENDEREÇOS DE REDE PRIVADOS. 10.0.0.0 até 10.255.255.255 172.16.0.0 até 172.31.255.255 192.168.0.0 até 192.168.255.255. Kernel

ENDEREÇOS DE REDE PRIVADOS. 10.0.0.0 até 10.255.255.255 172.16.0.0 até 172.31.255.255 192.168.0.0 até 192.168.255.255. Kernel ENDEREÇOS DE REDE PRIVADOS Foram reservados intervalos de endereços IP para serem utilizados exclusivamente em redes privadas, como é o caso das redes locais e Intranets. Esses endereços não devem ser

Leia mais

Capítulo 5 Métodos de Defesa

Capítulo 5 Métodos de Defesa Capítulo 5 Métodos de Defesa Ricardo Antunes Vieira 29/05/2012 Neste trabalho serão apresentadas técnicas que podem proporcionar uma maior segurança em redes Wi-Fi. O concentrador se trata de um ponto

Leia mais

Considerações a serem feitas antes da implantação.

Considerações a serem feitas antes da implantação. Multi-Loja Objetivo O objetivo deste documento é demonstrar o conceito de Multi-loja utilizando o Sismoura. É uma ferramenta que permite a comunicação entre as empresas, possibilitando assim que a matriz

Leia mais

Omega Tecnologia Manual Omega Hosting

Omega Tecnologia Manual Omega Hosting Omega Tecnologia Manual Omega Hosting 1 2 Índice Sobre o Omega Hosting... 3 1 Primeiro Acesso... 4 2 Tela Inicial...5 2.1 Área de menu... 5 2.2 Área de navegação... 7 3 Itens do painel de Controle... 8

Leia mais

MANUAL DO ADMINISTRADOR LOCAL. Entidade Municipal

MANUAL DO ADMINISTRADOR LOCAL. Entidade Municipal MANUAL DO ADMINISTRADOR LOCAL Entidade Municipal Abril / 2011 ÍNDICE Objetivos do Sistema de Registro de Integrado - REGIN... 3 Principais Módulos do Sistema... 4 Módulo Controle de Acesso... 5 Módulo

Leia mais

Guia de instalação para ambiente de Desenvolvimento LINUX

Guia de instalação para ambiente de Desenvolvimento LINUX Guia de instalação para ambiente de Desenvolvimento LINUX Conteúdo deste manual Introdução O guia de instalação... 3 Capítulo 1 Instalando o servidor Web Apache... 4 Teste de instalação do Apache... 9

Leia mais

SO - Conceitos Básicos. Introdução ao Computador 2010/01 Renan Manola

SO - Conceitos Básicos. Introdução ao Computador 2010/01 Renan Manola SO - Conceitos Básicos Introdução ao Computador 2010/01 Renan Manola Definição de SO É uma camada de software que opera entre o hardware e os programas aplicativos voltados ao usuário final. É uma estrutura

Leia mais

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO 1 ÍNDICE 1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO... 3 1.1 REQUISITOS BASICOS DE SOFTWARE... 3 1.2 REQUISITOS BASICOS DE HARDWARE... 3 2 EXECUTANDO O INSTALADOR... 3 2.1 PASSO 01... 3 2.2 PASSO

Leia mais

GUIA PRÁTICO DE INSTALAÇÃO

GUIA PRÁTICO DE INSTALAÇÃO GUIA PRÁTICO DE INSTALAÇÃO 1 1. PROCEDIMENTOS ANTES DA INSTALAÇÃO SIGEP WEB - Gerenciador de Postagens dos Correios 1.1. Solicitar Senha para Fechamento de PLP Solicitar ao seu consultor comercial a senha

Leia mais

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS Servidor: O servidor é todo computador no qual um banco de dados ou um programa (aplicação) está instalado e será COMPARTILHADO para outros computadores,

Leia mais

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário

Leia mais

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Breve Histórico A linguagem de programação C foi criada na década de 70, por Dennis Ritchie, que a implementou,

Leia mais

SAIBA MAIS SOBRE O LINUX E DESCUBRA QUAL DISTRIBUIÇÃO É MELHOR PARA VOCÊ! CURSO

SAIBA MAIS SOBRE O LINUX E DESCUBRA QUAL DISTRIBUIÇÃO É MELHOR PARA VOCÊ! CURSO 1 AULA SAIBA MAIS SOBRE O LINUX E DESCUBRA QUAL DISTRIBUIÇÃO É MELHOR PARA VOCÊ! ROTEIRO PRÉ-REQUISITOS 1 INTRODUÇÃO 2 DISTRIBUIÇÕES LINUX 3 AJUDA PARA ESCOLHER SUA DISTRIBUIÇÃO LINUX 4 DÚVIDAS FREQUENTES

Leia mais

Instalando o Debian em modo texto

Instalando o Debian em modo texto Instalando o Debian em modo texto Por ser composto por um número absurdamente grande de pacotes, baixar os CDs de instalação do Debian é uma tarefa ingrata. Você pode ver uma lista dos mirrors disponíveis

Leia mais

Permissões de compartilhamento e NTFS - Parte 1

Permissões de compartilhamento e NTFS - Parte 1 Permissões de compartilhamento e NTFS - Parte 1 Autor: Júlio Battisti - Site: www.juliobattisti.com.br Segurança, sem dúvidas, é um dos temas mais debatidos hoje, no mundo da informática. Nesse tutorial

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

Satélite. Manual de instalação e configuração. CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br

Satélite. Manual de instalação e configuração. CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br Satélite Manual de instalação e configuração CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br Índice Índice 1.Informações gerais 1.1.Sobre este manual 1.2.Visão geral do sistema 1.3.História

Leia mais

Uso do iptables como ferramenta de firewall.

Uso do iptables como ferramenta de firewall. Uso do iptables como ferramenta de firewall. Rafael Rodrigues de Souza rafael@tinfo.zzn.com Administração em Redes Linux Universidade Federal de Lavra UFLA RESUMO O artigo pretende abordar o uso de firewalls

Leia mais

Comm5 Tecnologia Protocolo MI. Protocolo. Família MI

Comm5 Tecnologia Protocolo MI. Protocolo. Família MI Comm5 Tecnologia Protocolo Família MI ÍNDICE PROTOCOLO... pág 03 PERMISSÃO... pág 03 AUTENTICAÇÃO... pág 03 IDENTIFICAÇÃO DAS PORTAS... pág 04 COMANDOS... pág 05 VERIFICAR AS ENTRADAS DO MÓDULO... pág

Leia mais

Instruções de Instalação do IBM SPSS Modeler (Licença Simultânea)

Instruções de Instalação do IBM SPSS Modeler (Licença Simultânea) Instruções de Instalação do IBM SPSS Modeler (Licença Simultânea) Índice Instruções de Instalação....... 1 Requisitos de Sistema........... 1 Instalando............... 1 Instalando a Partir de um Arquivo

Leia mais

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada

Leia mais

Aula 02. Introdução ao Linux

Aula 02. Introdução ao Linux Aula 02 Introdução ao Linux Arquivos Central de Programas do Ubuntu A Central de Programas do Ubuntu é uma loja de aplicativos integrada ao sistema que permite-lhe instalar e desinstalar programas com

Leia mais

2 Formalidades referentes ao trabalho

2 Formalidades referentes ao trabalho Bacharelado em Ciência da Computação DINF / UFPR Projetos Digitais e Microprocessadores 1 o Semestre de 2006 MICO-v12.r0 07/03/2006 Profs. Luis Allan Künzle e Armando Luiz Nicolini Delgado Atenção: Este

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

Leia mais

Trecho retirando do Manual do esocial Versão 1.1

Trecho retirando do Manual do esocial Versão 1.1 Trecho retirando do Manual do esocial Versão 1.1 A rotina de acesso direto ao XML do S-1000, o usuário pode encontrar na opção de cadastro de Empresas do SIP. Sempre que o usuário localizar a figura ao

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Projeto 1 - Bootloader

Projeto 1 - Bootloader Projeto 1 - Bootloader IF677 - Infra-Estrutura de Software Centro de Informática - UFPE Autor: Thyago Porpino (tnp) Objetivos Desmistificar o processo de inicialização de um computador. Entender como um

Leia mais

1. SINTAXE DA LINGUAGEM ASSEMBLY

1. SINTAXE DA LINGUAGEM ASSEMBLY 1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Iniciação à Informática

Iniciação à Informática Meu computador e Windows Explorer Justificativa Toda informação ou dado trabalhado no computador, quando armazenado em uma unidade de disco, transforma-se em um arquivo. Saber manipular os arquivos através

Leia mais

7 Processos. 7.1 Introdução

7 Processos. 7.1 Introdução 1 7 Processos 7.1 Introdução O conceito de processo é a base para a implementação de um sistema multiprogramável. O processador é projetado apenas para executar instruções, não se importando com qual programa

Leia mais

Objetivo. Este documento tem como objetivo demonstrar o conceito, o processo de instalação e o funcionamento do SITEF (Tef dedicado).

Objetivo. Este documento tem como objetivo demonstrar o conceito, o processo de instalação e o funcionamento do SITEF (Tef dedicado). Sitef - Instalação Objetivo Este documento tem como objetivo demonstrar o conceito, o processo de instalação e o funcionamento do SITEF (Tef dedicado). O que é Sitef? O SiTef (ou tef dedicado) é um conjunto

Leia mais