UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO DEPARTAMENTO DE INFORMÁTICA CURSO DE PÓS-GRADUAÇÃO EM REDES DE COMPUTADORES HEBER ALMEIDA BARBOSA DETECÇÃO DE INTRUSÃO EM REDES DE AUTOMAÇÃO INDUSTRIAL VITÓRIA 2006 HEBER ALMEIDA BARBOSA DETECÇÃO DE INTRUSÃO EM REDES DE AUTOMAÇÃO INDUSTRIAL Projeto Final de curso apresentado ao Programa de Pós-Graduação em Informática da Universidade Federal do Espírito Santo, como requisito parcial para obtenção do Grau de Especialista em Redes de Computadores. Orientador: Prof. Dr. Sérgio Antônio Andrade de Freitas. VITÓRIA 2006 HEBER ALMEIDA BARBOSA DETECÇÃO DE INTRUSÃO EM REDES DE AUTOMAÇÃO INDUSTRIAL COMISSÃO EXAMINADORA Prof. Dr. Sérgio Antônio Andrade de Freitas (Orientador) Departamento de Informática – UFES Prof. Dr. José Gonçalves Pereira Filho Departamento de Informática - UFES Prof. Rostan Piccoli Departamento de Informática - UFES Vitória, 02 de junho de 2006 SUMÁRIO LISTA DE FIGURAS LISTA DE TABELAS RESUMO ABSTRACT 1 INTRODUÇÃO 1 1.1 CONTEXTO 1 1.2 MOTIVAÇÃO 1 1.3 OBJETIVO 2 1.4 METODOLOGIA 2 1.5 ESTRUTURA DA MONOGRAFIA 3 2 SEGURANÇA DA INFORMAÇÃO EM AMBIENTES DE AUTOMAÇÃO INDUSTRIAL 4 2.1 INTRODUÇÃO 4 2.2 SISTEMAS DE AUTOMAÇÃO INDUSTRIAL 4 2.2.1 HISTÓRICO DA AUTOMAÇÃO INDUSTRIAL 5 2.2.2 CONTROLADOR LÓGICO PROGRAMÁVEL 7 2.2.3 SISTEMAS SCADA 9 2.2.4 SISTEMA DIGITAL DE CONTROLE DISTRIBUÍDO (SDCD) 11 2.2.5 UMA NOVA CONCEPÇÃO 13 2.2.6 REDES DE COMUNICAÇÃO 14 2.3 SEGURANÇA DA INFORMAÇÃO EM AMBIENTES INDUSTRIAIS 2.3.1 CONCEITOS DE SEGURANÇA DA INFORMAÇÃO 17 18 2.3.1.1 VULNERABILIDADES 18 2.3.1.2 INVASÃO OU INTRUSÃO 19 2.3.1.3 INCIDENTES DE SEGURANÇA 20 2.3.1.4 VÍRUS E WORMS 21 2.3.1.5 CAVALO DE TRÓIA 21 2.3.1.6 “BACKDOOR” 22 2.3.1.7 NEGAÇÃO DE SERVIÇO 22 2.3.1.8 SPOOFING 23 2.3.2 NOVO CONTEXTO NA INDÚSTRIA 23 2.3.3 AMEAÇAS AO AMBIENTE DE AUTOMAÇÃO INDUSTRIAL 27 2.3.4 CONTRAMEDIDAS 29 2.4 CONSIDERAÇÕES FINAIS 30 3 - SISTEMAS DE DETECÇÃO DE INVASÃO 31 3.1 INTRODUÇÃO 31 3.2 DEFINIÇÃO DE SISTEMA DE DETECÇÃO DE INVASÃO 31 3.3 SISTEMA DE DETECÇÃO DE INVASÃO BASEADO EM REDE 35 3.4 “SNORT” 38 3.4.1 FUNCIONAMENTO DO “SNORT” 39 3.4.1.1 MODO FAREJADOR 40 3.4.1.2 MODO DE REGISTRO DE PACOTES 41 3.4.1.3 MODO DE DETECÇÃO DE INTRUSÃO 42 3.4.1.4 MODO EM LINHA 46 3.5 O USO DE UM SISTEMA DE DETECÇÃO DE INVASÃO NO AMBIENTE INDUSTRIAL 4 MODBUS/TCP 47 52 4.1 INTRODUÇÃO 52 4.2 PROTOCOLO DE APLICAÇÃO MODBUS 53 4.2.1 DESCRIÇÃO 53 4.2.2 BASE DE DADOS MODBUS 57 4.2.3 DESCRIÇÃO DOS CÓDIGOS DE FUNÇÃO DO MODBUS 57 4.2.4 RESPOSTA DE EXCEÇÃO MODBUS 59 4.3 MODBUS SERIAL (RTU) 61 4.4 MODBUS/TCP 63 4.4.1 MODELO CLIENTE X SERVIDOR 63 4.4.2 MODELO DA ARQUITETURA MODBUS/TCP 65 5 SNORT APLICADO A UMA REDE MODBUS/TCP 77 5.1 INTRODUÇÃO 77 5.2 AMBIENTE DE SIMULAÇÃO 78 5.2.1 INSTALAÇÃO E CONFIGURAÇÃO DO SNORT 80 5.2.2 INSTALAÇÃO E CONFIGURAÇÃO DOS SIMULADORES 89 5.3 TESTE DO AMBIENTE 91 5.4 ANÁLISE DOS TESTES 99 6 CONCLUSÃO 100 REFERÊNCIAS BIBLIOGRÁFICAS 102 LISTA DE FIGURAS FIGURA 01 – MODELO DE ARQUITETURA UTILIZANDO UM SCADA. 09 FIGURA 02 – EXEMPLO DE UTILIZAÇÃO DE DRIVERS DE COMUNICAÇÃO. 10 FIGURA 03 – ARQUITETURA DOS COMPONENTES DE UM SDCD. 13 FIGURA 04 – SISTEMA DE CONTROLE UTILIZANDO O MODELO DE REFERÊNCIA GERAL [DRAFT]. 15 FIGURA 05 – COMPARAÇÃO DAS PRIORIDADES. 26 FIGURA 06 – ARQUITETURA REDUNDANTE. 27 FIGURA 07 – IDS BASEADO EM REDE. 32 FIGURA 08 – IDS BASEADO EM “HOST”. 33 FIGURA 09 – IDS DISTRIBUÍDO. 34 FIGURA 10 - RELACIONAMENTO ENTRE OS COMPONENTES CIDF. 37 FIGURA 11 – ARQUITETURA DO “SNORT”. 40 FIGURA 12 – CABEÇALHO DA REGRA. 43 FIGURA 13 – ARQUITETURA DE REDE INTEGRADA. 48 FIGURA 14 - IDSR NUM SEGMENTO DO NÍVEL DE CONTROLE E SUPERVISÃO. 50 FIGURA 15– IMPLEMENTAÇÃO DO PROTOCOLO MODBUS. 52 FIGURA 16 – PACOTE MODBUS GENÉRICO. 54 FIGURA 17 – MODELO DE TRANSAÇÃO MODBUS ENTRE CLIENTE E SERVIDOR. 55 FIGURA 18 – MODELO DE TRANSAÇÃO MODBUS ENTRE CLIENTE E SERVIDOR COM CÓDIGO DE EXCEÇÃO RETORNADO. 55 FIGURA 19 – MODELO EM CAMADAS. 61 FIGURA 20 – MODO DE COMUNICAÇÃO UNICAST. 62 FIGURA 21 – MODO DE COMUNICAÇÃO BROADCAST. 62 FIGURA 22 – ENDEREÇAMENTO MODBUS RTU. 62 FIGURA 23 – SERVIÇO DE MENSAGEM MODBUS. 63 FIGURA 24 – EXEMPLO DE APLICAÇÕES MODBUS. 64 FIGURA 25 – PACOTE MODBUS/TCP. 64 FIGURA 26 – MODELO DE ARQUITETURA MODBUS. 65 FIGURA 27 - DIAGRAMA DE ATIVIDADE DO GERENCIAMENTO DE CONEXÃO TCP. 67 FIGURA 28 – ESTABELECIMENTO DE CONEXÃO MODBUS TCP. 67 FIGURA 29 - TROCA DE DADOS MODBUS. 68 FIGURA 30 - DIAGRAMA DE ATIVIDADES CLIENTE MODBUS. 69 FIGURA 31 - DIAGRAMA DE ATIVIDADES DE PREPARO DE UMA REQUISIÇÃO. 71 FIGURA 32 - DIAGRAMA DE ATIVIDADES DO PROCESSO DE CONFIRMAÇÃO. 73 FIGURA 33 - DIAGRAMA DE TRATAMENTO DE REQUISIÇÃO. 75 FIGURA 34 – MODELO DE COMUNICAÇÃO CLIENTE X SERVIDOR MODBUS. 78 FIGURA 35 – AMBIENTE DE SIMULAÇÃO. 79 FIGURA 36 – SIMULADOR CLIENTE MODBUS. 89 FIGURA 37 – POOLING DE DADOS. 90 FIGURA 38 – SIMULAÇÃO DE ATAQUE. 96 FIGURA 39 – ESCRITA DE DADOS NO SERVIDOR. 98 LISTA DE TABELAS TABELA 01 – EXEMPLOS DE POSSÍVEIS INVASORES. 19 TABELA 02 – MODELO DE DADOS. 57 TABELA 03 – CÓDIGOS E SUB-CÓDIGOS DE FUNÇÃO. 58 TABELA 04 – CÓDIGO DE EXCEÇÃO. 60 TABELA 05 – CAMPOS DO CABEÇALHO MBAP. 72 TABELA 06 – DESCRIÇÃO DOS DADOS MODBUS/TCP. 93 TABELA 07 – DESCRIÇÃO DOS DADOS MODBUS/TCP. 94 RESUMO O ambiente da automação industrial tem presenciado uma grande revolução tecnológica nos últimos dez anos. De um ambiente totalmente isolado, onde imperava os sistemas proprietários, redes determinísticas e tecnologias dedicadas, a um ambiente integrado e compartilhado com os demais sistemas de uma corporação. Se há dez anos atrás TI e Automação eram um mundo à parte, hoje a integração destes dois mundos é uma necessidade. Este trabalho tem o objetivo de levantar as principais questões de segurança que surgem com este novo cenário e suas implicações para o ambiente industrial. E, como uma das medidas a serem tomadas para eliminar ou mitigar as ameaças a este ambiente, demonstrar a utilização de Sistemas de Detecção de Intrusão em redes de automação industrial. Esta demonstração é feita utilizando um Sistema de Detecção de Intrusão em uma rede de automação com o protocolo Modbus/TCP. ABSTRACT In the last tem years, the industrial automation environment has witnessed a big technological revolution. From an environment totally isolated, where the owners systems, deterministic networks and dedicated technology were the majority, to an integrated environment and shared with the other corporation systems. If in ten years ago, IT and Automation were two different worlds, today, the integration of theses two worlds it’s a necessity. The object of this work is standing the main security questions that emerge with this new scenario, its implications to the industrial environment and demonstrate the profits of using an Intrusion Detection System in automation networks, an important way to eliminate and mitigate the treats in this environment. A demonstration of that is done using an Intrusion Detection System in an automation network with the Modbus/TCP protocol. 1 1 Introdução 1.1 Contexto Há cerca de dez anos atrás o ambiente da automação industrial era um ambiente totalmente isolado do ambiente corporativo de uma empresa. Hoje, porém, estes dois ambientes precisam estar integrados e compartilhando informações por diversas razões. Uma destas razões é a necessidade de levar os dados de processo a um nível hierárquico mais elevado, alimentando sistemas de otimização de processo, planejamento, manutenção e gerenciamento da produção. Esta integração traz ao ambiente de automação industrial uma série de questões de segurança que antes eram particulares ao ambiente corporativo da empresa. Questões como a possibilidade de contaminação dos sistemas de controle e supervisão por vírus de computador, exploração de falhas de programação, tráfego de informações em texto pleno, ataques de negação de serviço, acesso não autorizado e outros tipos de vulnerabilidades e ameaças passam a fazer parte do ambiente industrial. Outra importante questão, é que a maioria dos protocolos de automação industrial não foi projetada para atender aos requisitos de segurança das redes corporativas. 1.2 Motivação A grande motivação para este trabalho é a implantação de um Sistema de Detecção de Intrusão ou IDS [10] (do inglês, “Intrusion Detection System”) com capacidade de analisar e monitorar o tráfego e detectar ataques em uma rede de automação industrial, de forma a eliminar ou mitigar as ameaças a este ambiente. Uma das dificuldades atuais para implementação desta tecnologia em redes industriais é a carência de ferramentas de detecção desenvolvidas para protocolos específicos deste ambiente, como o Foudation FieldBus [32], Profibus [24], Modbus [18] e OPC [17]. É interessante observar que a maioria dos protocolos das redes de automação industrial não foi projetada contemplando os requisitos de segurança da informação. O IDS então seria uma importante ferramenta para compensar estas deficiências. 2 1.3 Objetivo Este trabalho tem os objetivos de levantar as principais questões de segurança que surgem com o novo cenário tecnológico da automação industrial e demonstrar a utilização de IDS’s nos segmentos de rede de automação industrial nível dois, entre os dispositivos de controle e as IHM’s (Interface Homem Máquina), assinalando as vantagens de sua utilização como uma das medidas a serem tomadas para eliminar ou mitigar as ameaças e vulnerabilidades deste ambiente. Esta tecnologia provê segurança através da monitoração do acesso aos sistemas, registro de informações para análise de vulnerabilidades e monitoração do tráfego da rede e detecção de ataques. 1.4 Metodologia Para o desenvolvimento deste trabalho foi realizada revisão de bibliografias atualizadas dos anos de 2004 a 2006 abrangendo os seguintes temas: redes industriais, segurança de dados em ambientes industriais, protocolos de automação industrial, sistemas de detecção de intrusão e as respectivas normas técnicas das áreas de segurança da informação e segurança industrial. Visando demonstrar o uso de IDS em redes de automação industrial, foi definida uma arquitetura de rede para simulação de um ambiente industrial. A simulação foi necessária por dois motivos: dificuldades em realizar testes em um ambiente de automação industrial que esteja em produção e a dificuldade em alocar recursos necessários para os testes, como CLP [8] (Controlador Lógico Programável) e sistemas SCADA [8] (do inglês “Supervisory Control and Data Aquisition”). Na execução da simulação foi selecionado o protocolo Modbus/TCP, por ser um protocolo de padrão aberto e utilizado na comunicação de dispositivos cliente/servidor em redes de automação industrial nas indústrias de óleo e gás, siderúrgicas e de celulose do estado do Espírito Santo. E como IDS foi selecionado o Snort [5], por ser um IDS de rede de “código fonte aberto” e por permitir o desenvolvimento de regras específicas ao protocolo Modbus/TCP. Como descrito acima, este é um importante requisito, pois a maioria dos atuais IDS’s não tem regras para protocolos como o Modbus/TCP. 3 No ambiente implantado, a comunicação Modbus TCP se estabelece entre um sistema SCADA e o aplicativo servidor, um Controlador Lógico Programável. O IDS é responsável por capturar os pacotes do segmento de rede e os comparar a partir de um padrão, na busca por assinaturas que indiquem um ataque. Estas assinaturas são definidas em conjuntos de regras, que além das informações de assinatura de um ataque, contêm informações que permitem definir a metodologia do ataque em termos de identificação do invasor. 1.5 Estrutura da monografia Esta monografia está estruturada da seguinte forma: No capítulo 2, é apresentado um histórico da evolução tecnológica dos sistemas de controle de automação industrial, bem como uma definição dos principais conceitos desta área. Além disso, são apresentados: conceitos de segurança da informação que se aplicam ao ambiente industrial, o novo contexto tecnológico das indústrias, as ameaças advindas com este novo contexto e as possíveis contramedidas para combater estas ameaças. No capítulo 3, é definido um sistema de detecção de invasão, com um foco maior no sistema de detecção de invasão de rede e é feita a apresentação do Snort, IDS de rede utilizado nos testes. No capítulo 4, é apresentado o protocolo Modbus, sendo descrito o protocolo de aplicação, seu modelo de dados, códigos de função e códigos de respostas de exceção. É feita uma breve apresentação do Modbus Serial e uma apresentação mais detalhada do Modbus/TCP, descrevendo o modelo cliente servidor e o modelo da arquitetura do protocolo. O capítulo 5 é destinado a descrever o ambiente de simulação e a execução dos testes realizados. São apresentadas as regras desenvolvidas no Snort específicas para o Modbus e a análise dos resultados dos testes realizados. Finalmente, no capítulo 6, são apresentadas as conclusões sobre o trabalho realizado e as possibilidades de desenvolvimento de futuros trabalhos. 4 2 Segurança da Informação em ambientes de Automação Industrial 2.1 Introdução Este capítulo apresenta os conceitos relativos à segurança da informação aplicados ao ambiente de automação industrial. Inicialmente é feito uma descrição dos sistemas de automação industrial e o histórico de evolução tecnológica destes durante os anos. Entender este histórico apresentado é importante para um melhor entendimento da importância do tema de segurança em processos industriais. Após, é abordado o tema de segurança especificamente aplicado ao ambiente industrial. São apresentados: os principais conceitos de segurança da informação, o novo contexto tecnológico da indústria, as novas ameaças e vulnerabilidades deste ambiente e as contra medidas possíveis para mitigar ou eliminar estas ameaças e vulnerabilidades. 2.2 Sistemas de Automação Industrial Especificamente, os sistemas de controle industriais são responsáveis pelo controle do processo industrial e incluem todos os sistemas que podem afetar ou influenciar a segurança do processo (“safe”), o controle e a segurança dos dados (“security”) e a operação de um processo industrial. Estes sistemas incluem (não se limitando a estes): • Sistemas de controle de processo, incluindo SDCD's, CLP's, UTR's, Dispositivos Inteligentes Eletrônicos, SCADA, sensores e controles eletrônicos de rede e sistemas de diagnóstico e monitoração. • Sistemas de informações associadas assim como controle avançado e multivariáveis, otimizadores on-line, equipamentos de monitoração dedicados, interfaces gráficas, historiadores de processo e sistemas de gerenciamento das informações da planta. 5 Assim como o mundo da informática, o mundo da automação industrial tem passado por uma grande e acelerada revolução tecnológica. Esta revolução acontece por vários motivos: necessidade de otimizar os processos industriais, redução custos de investimentos, aumento da segurança operacional e agilização dos processos de tomada de decisão. O escopo das atividades da automação também mudou consideravelmente nos últimos. “A automação rompeu os grilhões do chão de fábrica e buscou fronteiras mais amplas, se abrangendo a automação do negócio ao invés da simples automação dos processos equipamentos” [6]. E esta mudança, alterando paradigmas e conceitos, traz uma série de novas questões aos responsáveis por esta área nas indústrias. Os sistemas de automação industrial são um dos principais pontos críticos de um processo de produção e manufatura de uma corporação. Por isso, o tema “Segurança da Informação”, que também tem sido chamado de “Cyber Security”, deve ser tratado como prioridade pelos responsáveis por estes processos. E para se entender o porquê da inclusão e da importância deste tema nestes ambientes, é importante entender, de uma forma genérica, o contexto desta área, dando uma rápida olhada na história e evolução dos sistemas de automação industrial através dos tempos. 2.2.1 Histórico da automação industrial Até o final da década de 50, imperava nas indústrias os sistemas de medição e controle pneumáticos, que ofereciam pouca precisão e confiabilidade. O sinal padrão adotado no Brasil para estas aplicações era a variação da pressão de ar na faixa de 0,2 a 1,0 Kgf/cm2 ou de 0,2 a 1,0 bar. Este tipo de sinal continua sendo utilizado na atuação de válvulas de controle e ainda é utilizado em algumas malhas de controle em processos industriais antigos que não foram automatizados. A partir da década de 70, impulsionados pela crescente competitividade na indústria, surgem os primeiros transmissores eletrônicos. Os primeiros equipamentos eletrônicos medidores de campo, se interligavam aos controladores através de sinais analógicos de tensão ou corrente (0-10V e 0-20mA). A parte de lógica discreta (liga/desliga) e intertravamento, era implementada pela combinação de relés e chaves eletromecânicas. 6 Na década de 80 o padrão de comunicação analógica (4 a 20 mA) se estabelece como principal forma de conectar os equipamentos de campo, como os transmissores, válvulas de controle e motores, aos equipamentos de controle do processo. Estes equipamentos de controle geralmente eram instalados em enormes painéis em salas conhecidas como Centro de Controle, onde os operadores tinham acesso de leitura e ajuste nos controladores. Os registros históricos das variáveis de processo em função do tempo eram feitos por registradores, pneumáticos ou eletrônicos, em cartas graduadas com escalas diversificadas. As funções de integração ou totalização dos dados de processo, anúncio de alarmes, indicação e outros, eram realizadas por equipamentos dedicados a cada função específica. O operador, em muitos casos, ficava à mercê de uma centena de pontos de leitura. Ainda na década de 80, surge o protocolo digital de comunicação HART [27], que se utilizava do meio de transmissão analógico utilizado (4 a 20 mA) para a disponibilização de informações entre um equipamento medidor micro processado e o sistema de controle da planta. O protocolo HART introduziu no ambiente de automação a possibilidade de visualização das informações do instrumento, como dados de configuração e calibração, e do processo medido de forma “on-line”, disponibilizando estas informações para os sistemas de gerenciamento de manutenção e outros tipos de interfaces. A comunicação pode ser feita por meio de computadores de mão, microcomputadores com o programa específico instalado ou por sistemas digitais de controle que suportem o protocolo. A partir do HART, inicia-se o movimento dos protocolos digitais de comunicação, de onde surgiram protocolos tais como: Foudation FieldBus, Profibus, Modbus e OPC. O primeiro Controlador Lógico Programável (CLP), equipamento de controle micro processado, surgiu em 1968, devido à sofisticação dos processos industriais, que requeriam sistemas mais rápidos e confiáveis. O CLP foi originalmente concebido para substituir os incontáveis relés de circuitos lógicos de controle discreto, porém, hoje é utilizado para praticamente todos os tipos de controle, como será abordado mais adiante neste capítulo. A tecnologia da informação começa a entrar neste ambiente industrial na década de 80, com o surgimento dos Sistemas Digitais de Controle Distribuídos (SDCD's). “Através 7 do uso de cartões de Entrada e Saída (E/S) dedicados, a automação experimentou uma evolução jamais vista” [26]. Surgem também os primeiros sistemas supervisórios, que possibilitavam ao operador o controle em um único console, de todas as variáveis de processo da planta industrial. Estes sistemas tinham o propósito de substituir os antigos equipamentos de painel, como os controladores, anunciadores de alarmes, registradores e muitos outros, e centralizá-los em uma única interface, que possibilitasse o acesso a todas as informações do processo, de maneira ágil, rápida e efetiva. No princípio, os sistemas operacionais utilizados pelos sistemas de automação industrial eram sistemas robustos como o RSX-11, QNX e VMS, que requeriam um alto nível de conhecimento técnico. Em todos os casos a interoperabilidade de sistemas era algo inimaginável. Atualmente, estes sistemas operacionais estão dando lugar aos sistemas operacionais de mercado, como o Windows, que está sendo utilizado pela maioria de fornecedores de sistema SCADA. 2.2.2 Controlador Lógico Programável O Controlador Lógico Programável (CLP) surgiu, basicamente, para substituir os relés eletromecânicos utilizados nos controles discretos, ou lógicos. Sua concepção surgiu a partir da necessidade de um sistema mais confiável (em termos operacionais), mais flexível (em termos de programação) e menor que os relés então utilizados. O primeiro CLP foi desenvolvido como o nome de “MOdular DIgital CONtroller”, donde derivou o nome MODICON. Sua primeira aplicação foi na GM, em uma linha de fabricação de automóveis. Atualmente, o CLP assumiu várias funções além das funções para as quais ele fora projetado. Funções como o controle de variáveis analógicas, tráfego de informações do “chão de fábrica” às linhas de comunicação de alta velocidade, disponibilizando os dados de produção para outras unidades de produção, geração de relatórios e preparação de dados para Interfaces Homem Máquina (IHM). O hardware de um CLP pode ser dividido em dois grupos: os do tipo caixa única, que contém em um único invólucro a fonte de alimentação, a CPU e os cartões de entrada e 8 saída; e os modulares, onde os módulos de CPU, módulos de entrada e saída, módulos de comunicação e fonte de alimentação são montados em um rack. O CLP tem vários tipos de linguagens de programação próprias e bem diferentes das tradicionalmente utilizadas no meio da informática. Atualmente, as linguagens mais utilizadas são o “Ladder” (Histograma de Contatos), primeira linguagem desenvolvida e a mais popular, o diagrama de blocos funcionais, a lista de instruções lógicas, a linguagem estruturada Grafcet e suas derivadas. A arquitetura de um CLP consiste na CPU (que em muitos casos é redundante), nas interfaces de entradas e saídas, e na memória. O CLP, apesar de permitir a implementação de quase todo tipo de função, ainda é basicamente utilizado para o controle de processo. As funções de interface com os operadores, aquisição de dados, geração de históricos e relatórios, atualmente ainda fica com os sistemas supervisórios, ou sistemas SCADA, instalados em microcomputadores. Existem vários tipos de comunicação com os equipamentos de “chão de fábrica” (instrumentação, válvulas de controles, motores elétricos, conversores de freqüência e outros), sendo as principais, a comunicação analógica (4 a 20mA, 1 a 5 Vcc), a comunicação discreta (ponto a ponto) e a comunicação via rede de comunicação (FieldBus H1, Profibus-PA e DeviceNet). Para a interface com outros sistemas micro processados, como outros CLP’s, SDCD’s, microcomputadores de interface-homemmáquina (sistemas supervisórios) e instrumentos micro processados, existem também vários protocolos disponíveis para os meios de comunicação serial (RS-232/485), ethernet, wireless e vários outros. A maioria dos fabricantes apresenta pelo menos uma opção de protocolo proprietário, que permite a comunicação com CLP’s do mesmo fabricante. Para a comunicação com CLP’s de outros fabricantes, é necessária a utilização de drivers de comunicação, ou “gateways”, que fazem a tradução do protocolo proprietário para outro protocolo proprietário de outro fabricante, ou para um protocolo de padrão aberto, como o Modbus. Apesar das várias iniciativas de desenvolvimento de padrões de comunicação, este é ainda um grande problema em ambientes industriais, se tornando um campo de batalha entre os fabricantes. Existem algumas aplicações onde o CLP está sendo substituído por um microcomputador usando as mesmas linguagens de programação. Esta é uma questão 9 que gera várias discussões entre os engenheiros e técnicos da área, devido à questão da confiabilidade tanto do “software” como do “hardware”. 2.2.3 Sistemas SCADA Os sistemas SCADA (“Supervisory Control and Data Aquisition”), que em algumas aplicações são referidos como sistemas supervisórios, são responsáveis por coletar os dados de processo disponibilizados pelos equipamentos de controle (CLP's, remotas industriais e outros) e os apresentar em tempo real, através de uma interface (gráfica) homem máquina, aos operadores. Como demonstrado na figura 01, estes sistemas são implantados, na maioria das aplicações, em conjunto com os CLP's, constituindo o sistema de automação da planta. Figura 01 – Modelo de arquitetura utilizando um SCADA. As principais funções destes sistemas são: representar de forma gráfica a planta industrial, exibir os status das variáveis de processo dinamicamente, prover meio para operação de equipamentos, gerenciar os alarmes, registrar os dados de tendência da variável, armazenar valores históricos, gerar relatórios, permitir a construção de estratégias de controle, gerar “logs” de eventos e outros. Um sistema SCADA se comunica com um CLP através de uma interface de comunicação convencionada, que estabelece a forma como os dados são ordenados na memória do CLP. Estas interfaces, que também são conhecidas como drivers de 10 comunicação, devem ser capazes de ler e escrever na memória de um CLP, executando o protocolo particular daquele equipamento. Num nível hierárquico mais elevado, ou para se comunicar com outros sistemas SCADA no mesmo nível operacional, também são utilizados os drivers de comunicação. Na figura 02 é demonstrado um exemplo de aplicação de comunicação, onde o sistema SCADA iFix, da Intelution, se comunica com o CLP da Modicon através de uma interface Modbus MBE, e com a aplicação PIMS através das interfaces do padrão OPC (“OLE Process for Control”). Figura 02 – Exemplo de utilização de drivers de comunicação. A aplicação SCADA deve ser capaz de enviar mensagens de leitura e escrita para o CLP, que deve ser capaz de receber as mensagens, processá-las, atualizar as saídas e, se necessário, retornar o dado requerido. Por exemplo, se o operador executa um comando de desligamento de um motor, via aplicação SCADA, este comando será traduzido numa mensagem de escrita que será enviada ao CLP. Este recebe a mensagem com um bit com valor 1 e o escreve na memória. O “scan” do programa atualiza as entradas, realiza o processamento lógico e um comando de saída é enviado ao elemento de controle do motor para desligá-lo. 11 Os comandos que um sistema SCADA deve prover são os comandos de leitura e escrita de palavra (variáveis analógicas), leitura e escrita de blocos de palavras, leitura e escrita de variável discreta e escrita de variável digital. Atualmente, a grande maioria dos sistemas SCADA é desenvolvida para rodar em plataformas com sistema operacional Windows. No início, estes sistemas eram utilizados pelos operadores apenas para funções de monitoração de processos, daí a denominação de supervisório. Porém, após uma evolução tecnológica, estes sistemas incorporaram as funções de controle do processo, função que eram concentradas apenas nos SDCD's. 2.2.4 Sistema Digital de Controle Distribuído (SDCD) O Sistema Digital de Controle Distribuído (SDCD ou DCS, do inglês “Distributed Control System”) surgiu no final da década de 70, como resultado de um estudo sobre as rotinas de uso das salas de controle centralizado e chamava-se TDC-2000. Podemos definir um SDCD como “um sistema de controle industrial micro processado, criado inicialmente para efetuar especificamente o controle das variáveis analógicas, e foi sendo expandido em suas aplicações até abranger praticamente todas as aplicações de controle usuais, incluindo-se aí as variáveis discretas, o controle de bateladas, controle estatístico de processo, geração de relatórios etc” [8]. O SDCD, do ponto de vista do controle, acumula várias funções, fazendo tudo que os computadores tradicionais faziam: • Aquisição de dados; • Controle estatístico de processo; • Troca de receitas em processos para produção em bateladas; • Otimização de dados; • Interface com outros sistemas; • Dispor telas que simulam um painel de operação e telas de representação do processo; 12 • Registro histórico e de tendência de variáveis de processo; • Geração de relatórios; • Funções de alarme (sonorização, visualização e reconhecimento). O SDCD é composto de quatro componentes: a interface com o processo (aquisição de dados), o controlador, a interface homem máquina e a via de comunicação de dados. • A interface com o processo é responsável por coletar os dados de produção, através de vários meios de comunicação e disponibilizá-los ao controlador. Outras funções como isolamento elétrico dos sinais de campo, conversão de protocolos e outros mais, são acumuladas por este componente. • O controlador (ou estações de controle), é responsável pela modelagem matemática, processamento dos algoritmos de controle, otimização, cálculos e controles estatísticos e outros. Ele recebe os dados de processo, realiza o processamento e gera um sinal que é enviado de volta ao processo para realizar o controle da malha. • A via de comunicação de dados, disponibiliza os dados do controlador para a interface homem máquina através de um meio de comunicação, que geralmente é proprietário. Este componente é também responsável por interligar o SDCD aos sistemas de nível hierárquicos mais elevados, como os sistemas gerenciais da empresa. • A interface homem máquina (estações de operação), é responsável por disponibilizar para o operador, a partir dos dados do controlador, uma visualização dos alarmes gerados, registros de tendência e históricos, telas de processo, geração de relatórios e outros. 13 Figura 03 – Arquitetura dos componentes de um SDCD. Os primeiros SDCD’s eram sistemas proprietários, não sendo possível uma intercambialidade ou interoperabilidade com outros equipamentos de outros fabricantes. O primeiro passo na quebra desta estrutura, foi a utilização de máquinas da linha MicroVax da Digital nas estações de operação. A seguir, devido a fatores econômicos, as máquinas VAX com VMX, deram lugar a micros PC’s compatíveis utilizando sistemas operacionais como o UNIX. Atualmente, a maioria dos SDCD’s são projetados utilizando o sistema operacional Microsoft Windows na plataforma Intel. 2.2.5 Uma nova concepção Apesar de terem sido concebidos com propósitos distintos, com o avanço tecnológico, CLP's e SDCD's estão evoluindo e convergindo em termos de funcionalidade a cada dia. Os CLP’s ficaram mais versáteis e incorporaram as interfaces gráficas do operador, e os SDCD’s ganharam em flexibilidade e se tornaram mais abertos, vindo a poder utilizar 14 outros padrões de comunicação, além de terem baixado seu custo significativamente. Porém, é importante ressaltar que ainda existe uma série de funcionalidades que distingue um sistema do outro. Estas funcionalidades estão desde o objetivo principal para os quais eles foram criados, como diferenças de tipo de processamento da CPU, tempo de varredura, desempenho, bibliotecas de funções, robustez e outros. Ainda com a evolução da tecnologia digital e informática, vários sistemas estão incorporando as várias características que compreendem funções de SDCD, de CLP, de SCADA e outros [8]. Estes sistemas são conhecidos como sistemas híbridos, dedicados às aplicações com mais de 1000 pontos analógicos, limite aceito para aplicação SCADA + CLP. 2.2.6 Redes de comunicação O advento das redes de comunicação no ambiente industrial permitiu uma grande interação funcional entre os vários dispositivos que compõem este ambiente, aumentando a produtividade e o surgimento de novas oportunidades de desenvolvimento de novas funcionalidades. Com este novo cenário, houve um considerável aumento na quantidade e qualidade das informações dos equipamentos de campo e do próprio processo, disponibilizadas para um melhor gerenciamento da manutenção, produção, inspeção e outros. Além do fato de que, para se realizar uma programação remota, não é mais necessário o acesso físico ao dispositivo de campo. Outra grande vantagem, foi a melhora da eficiência e rapidez da aquisição de dados. A ISA propõe um modelo de referência geral, que é baseado no “Purdue Reference Model” (PRM) do “Computer Integrated Manufactoring” e no Modelo Funcional Hierárquico da ANSI/ISA-95.00.00.01-2000, que descreve as funções e atividades em seis níveis, do nível processo (nível 0) ao nível corporativo (nível 5). 15 Figura 04 – Sistema de controle utilizando o Modelo de referência geral [DRAFT]. Os seis níveis de referência do modelo, como demonstrado na figura 04, são descritos a seguir: a. Nível 5 – Corporativo. Inclui os sistemas corporativos da empresa, como sistemas financeiros, sistemas de correio eletrônico, intranet e outros. b. Nível 4 – Administração (Planejamento de negócios e logística). Este nível inclui sistemas de planejamento da produção, gerenciamento operacional, gerenciamento de manutenção e inspeção, sistemas MES (“Manufactoring Execution System”) e outros. c. Nível 3 – Operações de manufatura e controle. 16 Este nível inclui sistemas de planejamento detalhado de produção, geração de dados históricos (PIMS) com longo período de armazenamento, análise off-line dos dados para funções de suporte de engenharia, otimização de custos para áreas de produção específicas, consolidação de relatórios de produção e outros. d. Nível 2 – Operação, controle e supervisão. Neste nível são realizadas as funções de operação da planta de produção. Os sistemas deste nível são responsáveis por prover uma interface homem-máquina para o operador, gerar alarmes e alertas para o operador, funções de controle e supervisão e gerar dados históricos com curto período de armazenamento. Exemplos de protocolo de redes nível 2: FieldBus HSE, PROFInet, EtherNet/IP, Modbus/TCP, OPC. e. Nível 1 – Controle básico de processo. Este nível inclui os equipamentos de controle e monitoração, que estão diretamente ligados aos sensores (instrumentos de medição de variáveis de processo) e elementos finais de controle do processo (válvulas de controle, motores elétricos e outros). Equipamentos de monitoração são responsáveis por ler os dados dos sensores, em alguns casos executar um algoritmo e manter um histórico de processo. E os equipamentos de controle são responsáveis por ler os dados dos sensores, executar um algoritmo, enviar uma saída para o elemento final de controle e manter um histórico de processo. Alguns exemplos de equipamentos deste nível são os SDCD’s, CLP’s e RTU's (“Remote Terminal Unit”). Exemplos de protocolo de redes nível 1: DH+ (“Data Highway”), DeviceNet, Modbus/TCP. f. Nível 0 – Rede de campo. Este nível é também conhecido como chão de fábrica e inclui os vários tipos de sensores e elementos finais de controle que são diretamente conectados ao processo ou aos equipamentos de um processo industrial. Os sensores são responsáveis por medir a variável do processo (pressão, temperatura, nível, fluxo e outros) e convertê-la em um sinal padrão a ser enviado ao equipamento de 17 controle. Os transmissores, os analisadores e os transdutores, são exemplos de sensores. E os elementos finais de controle, são responsáveis por receber o sinal de correção do controlador, e atuar no processo, de modo a manter o equilíbrio desejado do processo. As válvulas de controle e os motores elétricos são exemplos deste tipo de equipamento. Exemplos de protocolos de redes nível 0: FieldBus H1, Profibus PA, Profibus DP, AS-i, Modbus/TCP. É importante mencionar a existência de um outro nível, chamado de nível de Segurança Crítica, que seria acrescentado antes do nível 0. Este nível inclui sistemas de segurança de processo que tomam ações automáticas em casos de falhas para manter a segurança da planta, como por exemplo, as PSV's (válvulas de segurança). Porém, neste trabalho, este nível será considerado como parte do nível 0. A classificação em níveis é muito importante não apenas para se obter uma visão macro da infra-estrutura da arquitetura de um sistema de automação industrial, mas também para segregar os tipos de serviços e características específicas de cada um. De acordo com o modelo de referência, o escopo de controle dos níveis 3 e 4 devem abranger toda a empresa (petrolífera, celulose e papel, farmacêutica e outros), e o escopo dos níveis 2 e 1, deve abranger apenas uma planta específica (eletroquímica, geração de vapor, enfardamento, reator e outros), ou mesmo uma parte da planta. A velocidade de resposta da ação de controle diminui na proporção que se desce na hierarquia do nível mais alto para o nível mais baixo. No nível 0, os tempos de resposta são tipicamente em mili segundos, no nível 1, os tempos de resposta são tipicamente em segundos, nível 2, em minutos, e nos níveis 4 e 5 em horas ou dias. Os sistemas nos níveis 1 e 2 geralmente são redundantes pela necessidade de garantir a disponibilidade operacional do processo. 2.3 Segurança da Informação em ambientes industriais A norma ISO/IEC 17799:2005 define segurança da informação como sendo “a proteção da informação de vários tipos de ameaças para garantir a continuidade do negócio, minimizar o risco ao negócio, maximizar o retorno sobre os investimentos e as 18 oportunidades de negócio”. Como será discutido mais adiante, esta definição vale para o ambiente industrial, porém é necessário entender que o negócio em questão é o processo industrial, onde a segurança humana, da planta e do meio ambiente deve ser priorizada. Quando se trata de segurança de redes industriais, o que está em discussão é como manter estas redes livre de danos, físicos ou lógicos. Ou seja, manter seguras as pessoas, processos e equipamentos inseridos no contexto industrial. 2.3.1 Conceitos de Segurança da Informação Entender a importância do tema “segurança da informação” em ambientes industriais, como será abordado adiante, é fundamental para que uma empresa consiga manter a continuidade de seus negócios. É muito importante que os executivos da área reconheçam a necessidade de investimento nesta área e que os riscos sejam bem avaliados. Alguns importantes conceitos de segurança da informação serão definidos neste item, visando uma melhor compreensão do assunto abordado. 2.3.1.1 Vulnerabilidades Vulnerabilidade pode ser definida como sendo “uma falha no projeto ou implementação de um software ou sistema operacional, que quando explorada por um atacante resulta na violação da segurança de um computador” [3]. Em outras palavras, pode-se dizer que vulnerabilidade é qualquer brecha de segurança de um sistema, de uma rede de computadores ou de qualquer outro ativo da empresa. E é importante ressaltar que isto também inclui os sistemas do ambiente industrial da empresa. A maioria dos projetos de automação, durante sua concepção, não teve os requisitos de segurança contemplados. Portanto, os sistemas instalados podem conter vulnerabilidades que podem ser exploradas por qualquer pessoa que conheça as brechas e que tenha acesso aos mesmos. Um exemplo claro é o projeto Modbus, protocolo de comunicação para redes de automação que será abordado com mais detalhes no capítulo 4. Este protocolo foi projetado para funcionar em um ambiente dedicado e totalmente 19 isolado de outros sistemas, e não foram levados em conta as questões como acesso não autorizado aos dispositivos de controle, leitura de dados indevida e outras. 2.3.1.2 Invasão ou intrusão Muitos dos problemas das corporações, quando se trata de segurança da informação, são causados por invasões a sistemas ou redes de computadores. Estas invasões ocorrem de forma intencional por pessoas com certos benefícios ou privilégios adquiridos em sistemas ou serviços de rede. Estes benefícios e privilégios permitem que o invasor use os serviços da rede e os sistemas para o fim desejado. Em alguns casos o invasor tem a intenção de causar prejuízos à corporação, mas muitas vezes é apenas uma forma de demonstrar seus conhecimentos técnicos. Como se pode observar na Tabela 01, são vários os tipos de invasores que ameaçam as instituições, desde os mais experientes “hackers” aos adolescentes que utilizam os programas prontos na internet para realizarem suas invasões. Adversário Objetivo Estudante Divertir-se bisbilhotando as mensagens de correio eletrônico de outras pessoas. Também conhecidos como “script kiddies”, por utilizarem scripts desenvolvidos por usuários mais experientes. “Cracker” Representante Testar o sistema de segurança de alguém; roubar dados. de Tentar representar toda Europa e não apenas Andorra. vendas Executivo Descobrir a estratégia de marketing do concorrente. Ex-funcionário Vingar-se por ter sido demitido. Contador Desviar dinheiro de uma empresa. Corretor de valores Negar uma promessa feita a um ciente através de uma 20 mensagem de correio eletrônico. Vigarista Roubar números de cartão de crédito e vendê-los. Espião Descobrir segredos militares ou industriais de um inimigo. Terrorista Roubar segredos de armas bacteriológicas ou promover um atentado contra vidas humanas ou indústrias. Tabela 01 – Exemplos de possíveis invasores [1]. Como se pode observar na Tabela 01, implementar um ambiente seguro é muito mais do que implantar um sistema ou projeto sem erros de programação. Os registros de incidentes de segurança da informação causados por invasões crescem a cada ano, e é preciso se proteger também contra este tipo de ameaça. 2.3.1.3 Incidentes de Segurança Todo evento, indesejado e inesperado, que venha a comprometer a confidencialidade, a integridade e a disponibilidade da informação, causando prejuízos ao negócio da empresa, ou mesmo comprometer a segurança de um processo industrial, pode ser considerado como um incidente de segurança. Os incidentes de segurança ocorrem através da exploração de vulnerabilidades conhecidas de um sistema ou de uma rede de computadores. São exemplos de incidentes de segurança da informação [4]: Tentativas de ganhar acesso não autorizado a dados, sistemas ou redes de computadores; Uso ou acesso não autorizado a um sistema; Ataques de negação de serviços (DoS); Modificações em um sistema, sem o conhecimento ou consentimento prévio do proprietário do sistema; 21 Desrespeito à Política de Segurança de uma empresa 1 . 2.3.1.4 Vírus e worms Vírus são programas que são capazes de infectar outros programas, arquivos e ou sistemas de informática [3]. Através de uma série de instruções, estes programas podem causar sérios danos ao hardware ou software de um ambiente de informática. Ele se anexa a um programa hospedeiro, que ao ser executado pode contaminar vários programas ou computadores. No ambiente industrial, muitos sistemas utilizam macros para automatizarem determinadas tarefas. Um tipo comum é o vírus de macro, que é facilmente criado e que pode facilmente infectar os sistemas que utilizam macros, como os sistemas supervisórios e SCADA. É necessário que os programadores destes sistemas levem em conta os requisitos de segurança no momento da concepção e execução dos projetos. O “worm” é um programa capaz de se propagar automaticamente através de redes, enviando cópias de si mesmo de computador para computador. Ele se diferencia de um vírus, pela sua capacidade de se propagar sem a necessidade de ser executado e sem a necessidade do hospedeiro. 2.3.1.5 Cavalo de Tróia Um cavalo de tróia é um programa que alega ter uma funcionalidade, mas na verdade foi projetado para executar ações maliciosas ou danosas sem o conhecimento do usuário. Ele sempre faz algo inesperado e indesejável, como copiar arquivos sem autorização, roubar senhas e dados do usuário. Seu nome vem da mitologia, onde os Gregos, em guerra contra os Troianos, lhes enviam um cavalo gigantesco como presente. Porém, dentro do cavalo estavam centenas de soldados gregos que, passando pelas muralhas dos troianos, conseguem dominar a cidade. 1 Política de Segurança é um documento que provê orientação e apoio da direção da empresa para segurança da informação de acordo com os requisitos do negócio e com as leis e regulamentações relevantes. 22 Um cavalo de tróia pode ser um programa legítimo que teve seu código alterado para realizar as funções maliciosas ou mesmo um programa desenvolvido com o próprio intuito de enganar o usuário. 2.3.1.6 “Backdoor” Uma “backdoor” consiste num programa ou serviço que é incluído ou alterado por um atacante que tem a intenção de retornar ao computador ou sistema invadido, sem ser notado. É importante ressaltar que uma “backdoor” pode ser ou não maliciosa. Alguns desenvolvedores de programas incluem “backdoors” em seus produtos, alegando necessidades administrativas [3]. Porém, mesmo estas “backdoors” que foram incluídas com este propósito, podem ser descobertas por pessoas mal intencionadas, se tornando alvos de ataques. 2.3.1.7 Negação de Serviço Entende-se por negação de serviço, ou DoS (“denial of service”), como uma atividade maliciosa que tem por finalidade a retirada de operação de um serviço em uma rede de computadores. Geralmente um ataque DoS é implementado através de um computador, controlado através de backdoors, que enviam requisições a um computador alvo. Este computador alvo, que pode ser um servidor, devido ao grande número de requisições, maior que sua capacidade de processamento, ficará sobrecarregado e não conseguirá mais atender outras requisições da rede, tornando o serviço indisponível. Outra maneira de se implementar este ataque é gerando um grande tráfego na rede, fazendo com que toda a banda disponível seja ocupada. Um exemplo simples de um DoS é um ataque chamado “ping da morte”. Um tipo avançado de ataque de negação de serviço é o DDoS (“Distributed Denial of Service”), ou negação de serviço distribuído, onde vários computadores são utilizados para implementação do ataque. A implementação deste ataque pode causar um grande 23 impacto a uma rede de automação industrial, devido à sua capacidade de tirar do ar os serviços e sistemas de controle de uma planta industrial. 2.3.1.8 Spoofing A técnica de “spoofing” [2] é a autenticação de uma máquina, se fazendo passar por outra, forjando pacotes de um endereço de origem confiável. É um ataque com alto grau de complexidade, pois o atacante, além de forjar o endereço de origem, deve manter um diálogo de seqüência com o alvo do ataque. A manutenção deste diálogo é complexa, pois o valor do número de seqüência não é arbitrário. O alvo estabelece um número inicial de seqüência e o atacante deve acertar na resposta correta da seqüência. O complicador é que o atacante nunca recebeu pacotes do alvo. Estes são os passos que um atacante segue para realizar este tipo de ataque: 1. O atacante identifica o alvo e solicita a conexão; 2. O atacante coloca a máquina alvo temporariamente “fora do ar”, ou seja, ela fica incapaz de processar solicitações de conexões recebidas num certo intervalo de tempo. Isto pode ser implementado através de um ataque de inundação sincronizada [2]; 3. O endereço do host é forjado, utilizando um endereço de host que é confiável ao alvo; 4. O atacante se conecta ao alvo, disfarçando-se do host confiável; 5. O número de seqüência é identificado; 6. O ataque é realizado. Qualquer serviço de rede que utilize autenticação de endereçamento de IP pode sofrer ataques de “spoof”. 2.3.2 Novo contexto na indústria A evolução tecnológica da automação industrial trouxe consigo várias novas questões que precisam ser tratadas com bastante cuidado pelos engenheiros e técnicos da área. 24 Este novo contexto industrial, onde a integração do ambiente industrial ao ambiente corporativo, pode trazer vários ganhos para a empresa, porém, se não for dada uma devida atenção a esta integração, os danos podem ser muito maiores que os benefícios. É importante ressaltar que até a década de 90 o ambiente de automação industrial era totalmente à parte do ambiente corporativo de uma indústria, onde estão disponíveis os serviços de rede, como os serviços de correio eletrônico, intranet, e os sistemas de uso corporativo (RH, contabilidade, jurídico e outros). As redes de automação tinham uma característica diferente: eram determinísticas ao contrário das redes corporativas, que na maioria das vezes, eram baseadas no padrão IEEE 802.3 (Ethernet), por sua vez, os ambientes de automação possuíam sistemas operacionais de tempo real (RTOS), computadores industriais exclusivos e geradores de relatórios especiais. Hoje, os sistemas “fechados” estão dando lugar aos sistemas disponíveis no mercado. A maioria dos projetos de automação já prevê os computadores dos sistemas supervisórios rodando com o sistema operacional Windows, interligados com rede Ethernet e os relatórios sendo extraídos em planilhas Excel. A maioria dos protocolos de comunicação já possui uma versão Ethernet, onde seus pacotes são encapsulados em pacotes TCP, como é o caso do Modbus/TCP (estudado no capítulo 4). Existem inclusive vários CLP’s com “web service” embutido, permitindo que o operador, em qualquer lugar da rede, tenha acesso de leitura e escrita no controle do processo, através de um “browser”, como, o Internet Explorer, o Firefox e o Mozilla. Pode-se dizer que a rede de automação industrial, já não é mais uma ilha, na qual apenas os engenheiros e técnicos de automação tinham acesso. Na maioria das empresas, esta rede se interliga à rede corporativa, para permitir que os dados e informações de processo sejam acessíveis por qualquer ponto da empresa, para os sistemas gerenciais e estatísticos. Esta integração dos dois ambientes não aconteceu apenas pelo avanço das tecnologias de mercado, mas também porque as empresas começaram a perceber que coletavam muitos dados do processo, mas não faziam um uso adequado e otimizado destes dados. Era necessário levar estes dados de processo além do nível operacional, para um nível gerencial, onde eles pudessem ser analisados e serem tratados como informações, permitindo uma ação não apenas corretiva e reativa, mas preditiva e pró-ativa, 25 aumentando-se assim a eficiência, a competitividade e a produtividade da empresa. Neste cenário, surgiram os sistemas historiadores de processo ou PIMS (“Plant Information Management Systems”), capazes de coletar os dados por meio de várias interfaces de comunicação e disponibilizá-las em um banco de dados temporal centralizado. A partir daí, com o processo e os dados que descrevem seu comportamento sob controle num banco de dados centralizado, surgem os sistemas que trabalham para transformar dados em informações úteis aos negócios. Sistemas com estas funcionalidades são caracterizados como sistemas de gerenciamento da produção ou EPS (“Enterprise Production Systems”), que incluem os sistemas de acompanhamento da produção ou MES (“Manufactoring Execution System”), manutenção, gerenciamento de laboratórios ou LIMS (“Lab Information Management Systems”) e outros. A integração destes dois mundos é um fato e uma tendência globalizada sem retorno. Porém, os dois ambientes continuam, e continuarão sendo e tendo características, objetivos e restrições particulares. Enquanto o ambiente industrial prioriza a produção e a segurança humana, ambiental e operacional da planta, o ambiente corporativo prioriza o desempenho e a integridade da informação. A segurança da informação inclui três propriedades básicas: confidencialidade, integridade e disponibilidade. Em um sistema de tecnologia da informação típico, a estratégia de segurança tem como principal foco a confidencialidade da informação. A integridade e disponibilidade da informação vêm em seguida na ordem de prioridade estratégica. Para os processos de segurança da informação em ambientes industrial, as prioridades são inversas. Os procedimentos de segurança para este ambiente devem garantir a disponibilidade dos componentes dos sistemas, que são responsáveis pelo controle do processo. Estes componentes, por atuarem diretamente nos processos, são responsáveis pela segurança humana, ambiental e operacional da planta. Um simples comando indevido de abrir uma válvula de controle pode causar um grave acidente ou uma série de outros transtornos. A integridade e a confidencialidade da informação, na ordem de prioridade, vêm em seguida. 26 Figura 05 – Comparação das prioridades. Para que um projeto de arquitetura de um sistema de segurança de dados para o ambiente industrial seja bem implementado e eficaz, é preciso ter estas particularidades em mente. Um exemplo da importância desta questão é uma situação citada pelo professor Constantino Seixas [7], onde um operador ao tentar entrar no sistema digita sua senha errada e o sistema bloqueia sua entrada, conforme procedimento estabelecido. Após a terceira tentativa sua senha é cancelada para averiguação do caso, porém vários alarmes estão soando e ele precisa urgentemente acessar o sistema para reconhecimento destes. Nesse caso, a continuidade operacional é muito mais importante do que qualquer outro requisito de segurança da informação. Este é apenas um exemplo entre vários que podem ser citados. Mas o importante é entender as particularidades e se analisar cada caso, de maneira a priorizar a segurança humana, do processo e ambiental. Em sistemas críticos, para garantir a disponibilidade no nível operacional, as estações de operação, redes e controladores são redundantes. Na figura 06 tem-se um exemplo de arquitetura de automação redundante, onde o CLP primário realiza as operações normais de um controlador, leitura das entradas, processamento e atualização das saídas, e comunica-se com o secundário através de uma rede, para atualização e sincronismo dos dados de processo. Em caso de falha do CLP primário, o CLP secundário assume a comunicação com as entradas e saídas, mantendo assim, a continuidade do processo 27 industrial. Este tipo de arquitetura com redundância é frequentemente chamada de arquitetura "Hot-stand-by-backup".. Figura 06 – Arquitetura redundante. 2.3.3 Ameaças ao ambiente de automação industrial A diferença de objetivos e restrições entre os dois ambientes, se não for tratada com a devida atenção pode se tornar uma grande ameaça à integridade do processo. Porém, é importante ressaltar que existem outras ameaças tão graves como esta. O avanço tecnológico e a utilização de tecnologias disponíveis em mercado aumentaram consideravelmente a exposição dos sistemas de automação industrial às vulnerabilidades existentes. A quantidade de pessoas que têm conhecimento e que dominam os recursos do Windows e do TCP/IP é muito maior do que a quantidade de pessoas que conhecem os sistemas utilizados pela automação industrial. Hoje, é tranqüilamente possível encontrar na Internet vários programas maliciosos desenvolvidos especificamente para explorar vulnerabilidades dos sistemas e serem 28 utilizados em ataques a redes de computadores. E muitos destes programas podem ser utilizados por qualquer usuário de computador sem qualquer conhecimento específico de informática. A exposição dos sistemas SCADA às ameaças aumenta à medida que estes são conectados a um número cada vez maior de redes e sistemas para compartilhar dados e fornecer serviços on-line [11]. Segundo Howard Schmidt, ex-presidente do “President’s Critical Infrastructure Protection Board”, computadores apreendidos de grupos terroristas revelaram que estes grupos têm estudado as vulnerabilidades dos sistemas de automação industrial, considerando-os como possíveis alvos de ataques diretos. Muitos podem afirmar que esta é uma realidade longe da realidade brasileira. Mas aqueles que não se protegerem, além de estarem desguarnecidos frente às vulnerabilidades existentes, podem acabar se tornando alvos fáceis de “testes e simulações de ataques terroristas”. Diversas são as formas de se implementar um ataque a um sistema de automação industrial, seja explorando falhas de segurança ou degradando os serviços da rede [23]: • A propagação de códigos maliciosos; • A negação de serviços; • A exploração de vulnerabilidades no sistema operacional ou em outras aplicações; • A má configuração de serviços. Muitas empresas têm relutância em aplicar as medidas de segurança tradicionais em seus sistemas, tais como aplicação de atualização do sistema operacional, verificação de vírus, bem com as aplicações das atualizações das assinaturas de vírus, autenticação e gerenciamento de senha. E isto só aumenta a vulnerabilidade dos sistemas de automação atuais. Em 2003, por exemplo, o “worm Slammer” parou toda a operação de uma Usina Nuclear nos Estados Unidos após conseguir penetrar em seu sistema de controle. Além dos vírus, os ataques diretos também são ameaças que devem ser levadas em contas. Gary Sevounts [11] cita o exemplo do hacker que manipulou mais de 23 vezes, antes de ser preso, os sistemas SCADA que controlavam o sistema de saneamento na 29 Austrália. O atacante conhecia profundamente a rede e o software SCADA utilizado, e por meio de "spoof" conseguiu invadir a rede. Um relatório publicado pelo “British Columbia Institute of Tecnhology” atesta que, de 1982 a 2000, 38% dos incidentes de violação de segurança em sistemas de automação eram de origem interna, ou seja, eram originados por agentes de dentro do ambiente da própria empresa. Este valor saltou para 70% entre os anos de 2001 a 2003. É necessário que sejam implementadas medidas de segurança que protejam as redes de automação destas ameaças internas. O “firewall” é uma importante medida, mas controla apenas a entrada e saída de dados da rede. As contramedidas necessárias vão muito mais além do que a implantação de um firewall na entrada da rede, como será abordado na próxima seção. 2.3.4 Contramedidas Apesar de pouco se falar no assunto, muitas empresas têm buscado tomar providências para eliminar ou mitigar os efeitos que as vulnerabilidades e ameaças aos sistemas de automação industrial podem causar em um processo industrial, ou mesmo para os negócios de uma empresa. A iniciativa da ISA [9] de elaborar uma norma específica para este tema é um ótimo exemplo de que este assunto é crítico e tem sido priorizado por alguns segmentos da comunidade de automação industrial. Várias são as providências que precisam ser tomadas em contra ataque às vulnerabilidades aos quais os sistemas estão expostos. A relação abaixo aponta para algumas iniciativas importantes [11, 23, 28]: • O desenvolvimento e implementação de uma política de segurança específica para o ambiente de automação industrial, baseada em padrões, normas e práticas recomendadas da indústria; • A instalação, em locais estratégicos, de mecanismos contra códigos maliciosos; • O controle e o gerenciamento do serviço de acesso remoto, permitindo, se necessário, apenas sessões criptografadas; 30 • A instalação sistemática de atualizações de sistemas operacionais, softwares aplicativos e sistemas antivírus; • A realização de treinamentos e eventos de conscientização; • A manutenção do sincronismo de tempo entre todos os equipamentos de rede; • O estabelecimento de políticas consistentes de “backups”, que especifiquem o acesso aos arquivos gerados, agendamento adequado das rotinas do serviço, tempo de retenção dos arquivos, testes de restauração e outros; • Segmentação física e lógica das redes; • A geração de “logs”, com configurações corretas de armazenamento (“online” e “offline”) e análise; • Habilitação apenas dos serviços necessários; • A utilização de tecnologias de autenticação e autorização; • A utilização de “firewalls” em vários pontos internos e externos da infraestrutura da rede industrial; • A utilização de sistemas de detecção de invasão; • A criação de uma equipe de análise e resposta a incidentes de segurança. 2.4 Considerações finais Em 2004, o Departamento de Energia dos Estados Unidos (DOE) publicou 21 ações que podem ser aplicadas em um ambiente industrial como forma de reforçar a segurança das redes industriais. Uma das ações propostas é “implementar Sistemas de Detecção de Intrusão interna e externa e estabelecer monitoração de incidentes 24 horas por dia” [22]. Um sistema de detecção de intrusão pode ser uma ferramenta muito útil para ajudar na identificação de ataques e no reconhecimento das vulnerabilidades do sistema. O capítulo seguinte abordará este sistema com mais detalhes de modo a demonstrar sua aplicação e os ganhos desta em uma rede de automação industrial. 31 3 - Sistemas de detecção de invasão 3.1 Introdução Como descrito no capítulo anterior, um sistema de detecção de intrusão pode ser uma ferramenta útil na identificação de ataques e no reconhecimento das vulnerabilidades de um sistema de automação industrial. Neste capítulo é descrito o funcionamento de um sistema de detecção de invasão (IDS, do inglês “Instrusion Detection System”) e seus tipos disponíveis: baseado em rede, baseado em “host” e distribuído e entender como estes sistemas podem ser aplicados em uma rede de automação industrial. Também é descrito o funcionamento do “Snort” [13], sistema de detecção de invasão baseado em rede, de código-fonte-aberto, que possui vários recursos de configuração, flexibilidade e simplicidade no uso. Este trabalho é utilizado para descrever um sistema de detecção de invasão para redes de automação industrial utilizando o protocolo de comunicação Modbus/TCP. 3.2 Definição de sistema de detecção de invasão Podemos definir a detecção de invasão, como o ato de detectar uma entrada não autorizada de um computador em uma rede [13]. Este acesso não autorizado pode vir a comprometer a informação de uma empresa, ou seja, a confidencialidade, a integridade e a disponibilidade de arquivos e/ou sistemas. Um IDS monitora todo o tráfego em um segmento de rede a partir de um padrão, buscando detectar comportamentos que indiquem um possível ataque ou invasão, com o objetivo de causar danos ao funcionamento do sistema. Existem três tipos de sistema de detecção de invasão: IDS baseado em rede [29] (NIDS, do inglês “Network Instrusion Detection System”), IDS baseado em host [14] (HIDS, do inglês “Host Instrusion Detection System”) e IDS distribuído. O primeiro, como demonstrado na figura 07, monitora o tráfego de um segmento de rede com o objetivo de gerar registros, alertas e permitir que ações sejam tomadas quando um comportamento fora do padrão é detectado. Já o segundo, como 32 demonstrado na figura 08, monitora o “log” do sistema operacional e de aplicações em um computador, alertando contra a tentativa de ganho de acesso não autorizado a arquivos, dados ou serviços. O uso combinado dos dois tipos de sistemas de detecção é recomendado, pois o uso de um não elimina a necessidade do uso do outro. O terceiro tipo, demonstrado na figura 09, funciona em uma arquitetura gerenciador/investigação. A proposta desta implementação é a distribuição dos sistemas de detecção de invasão pela rede em locais distantes que se reportam a um servidor central. Os alertas podem ser enviados periodicamente para a estação de gerenciamento e utilizados para notificar o administrador da rede. Da mesma forma, os “downloads” de atualizações de assinaturas de ataque podem ser periodicamente enviados aos sistemas de detecção, de acordo com a necessidade de cada segmento. Os sensores podem ser tanto NIDS como HIDS, ou um combinação de ambos. Figura 07 – IDS baseado em rede. 33 Figura 08 – IDS baseado em “host”. 34 Figura 09 – IDS distribuído. Uma evolução dos tradicionais sistemas de detecção de invasão são os sistemas de prevenção de invasão (IPS, do inglês “Intrusion Prevention System”) [13]. Estes sistemas são similares ao IDS's, porém são programados para atuarem preventivamente de maneira a detectar e bloquear um ataque antes que danos sejam causados. Os dados reunidos durante a detecção de um ataque servem como base de informações para uma 35 ação automatizada contra o ataque. A idéia é agilizar o processo de tomada decisão do administrador da rede ao perceber a suposta invasão. Quando se fala em um sistema tomar decisões automáticas em uma rede de automação industrial, como no caso de um IPS, todo cuidado é pouco. Existe um receio muito grande pela comunidade de automação industrial quando se trata deste assunto, pois qualquer ação errada (falsos positivos e falsos negativos) que venha a ser tomada por um IPS pode causar sérios danos à integridade e segurança de um processo industrial. Mesmo o processo de tomada de decisão do operador, de parar ou não o processo industrial ao se receber uma mensagem de alerta do IDS, não é algo tão simples. O operador precisa estar convicto de sua decisão e das conseqüências da mesma, e para isto ele necessita que sua ação esteja fundamentada em uma informação correta. O IDS poderia ajudar neste processo de tomada de decisão do operador, gerando informações de fácil entendimento sobre a forma como o alerta foi detectado. Uma das grandes limitações das soluções atuais de IDS é que não conhecem a inteligência dos protocolos e aplicações SCADA. Futuras soluções deverão ser implementadas para atender estes requisitos. Os responsáveis pela segurança da informação nas empresas, deverão aprender as implicações dos protocolos e aplicações SCADA. Isto permitirá que muitos ataques no mundo industrial possam ser identificados. Ao invés de se implantar um IPS, atualmente é mais viável a implantação de um forte esquema de análise de “logs” com monitoria 24x7. Este trabalho aborda um IDS baseado em rede, especificamente com o objetivo de monitorar e analisar o tráfego de dados Modbus em um segmento de rede de Automação Industrial. 3.3 Sistema de detecção de invasão baseado em rede Um sistema de detecção de invasão monitora e analisa todo o tráfego de um segmento de rede. Para isto a placa de rede do equipamento deve operar no modo promíscuo, permitindo que todos os pacotes trafegados no segmento sejam capturados, incluindo os destinados a outros equipamentos. 36 Em se tratando do “hardware”, o IDS pode ser um equipamento dedicado ao serviço de detecção de invasão, com um sistema dedicado embutido e conectado à rede. Ou também pode ser um “software” para este fim instalado em um computador também conectado à rede, como por exemplo, o “Snort” [5]. Um IDS utiliza um mecanismo de comparação de assinaturas e padrões para identificar um ataque. O modo mais simples de se definir um IDS é descrevendo-o como uma ferramenta especializada que sabe ler e interpretar o conteúdo de arquivos de “log” de roteadores, “firewalls”, servidores e outros dispositivos de rede. Todos os pacotes capturados na sua interface de rede são comparados a partir de uma série de assinaturas de ataques conhecidos, o que permite identificar comportamentos e atividades que podem ser identificadas como um ataque. Pode ser comparado a um sistema de vigilância através de câmeras de vídeo ou guardas. Uma analogia deste uso das assinaturas para reconhecer e impedir ataques, pode ser feita com o funcionamento de um programa antivírus. O uso desta tecnologia permite que sejam implementadas proteções de segurança no ambiente de automação industrial, como por exemplo [9]: • Monitoramento do tráfego de dados de entrada e de saída no segmento de rede; • Registro de informações para o estudo do comportamento da rede e análise de ameaças, e; • Detecção, alarme, resposta ou prevenção contra ataques. Uma outra maneira de análise de eventos é chamada de detecção de anomalia [13]. Ela usa regras ou conceitos predefinidos sobre atividade de sistema “normal” e “anormal” para distinguir anomalias do comportamento normal do sistema e monitorar, relatar ou bloquear anomalias, quando elas ocorrem. Com o objetivo de prover um modelo de sistema de detecção de invasão que servisse de referência para os desenvolvedores da área, o CIDF [30] (“Common Intrusion Detection Framework”) definiu uma série de componentes que juntos definem um sistema de detecção de invasão. Estes componentes incluem um gerador de eventos (“E-boxes”), um analisador de eventos (“A-boxes”), um mecanismo de armazenagem (“D-boxes”) e 37 um mecanismo de contramedidas (“C-boxes”).A figura 10 demonstra a interação destes componentes. Ethernet E-box A-box D-box C-box Analisador passivo de protocolo Analisador de assinaturas e padrões Mecanismo de armazenagem Mecanismo de contramedidas Figura 10 - Relacionamento entre os componentes CIDF. O gerador de eventos (“E-boxes”) é o responsável por fornecer as informações sobre os eventos da rede para o sistema. Um evento pode ter uma grande complexidade ou pode ser uma ocorrência de protocolo de rede de baixo nível. Geradores de eventos são os órgãos sensoriais de um IDS. Sem um gerador de eventos, um IDS não tem como avaliar se uma porção de informações pode ser um ataque ou não. O analisador de eventos (“A-boxes”) recebe as informações do gerador de eventos, analisa-as e faz um tratamento, gerando uma saída mais compreensível aos outros componentes do sistema. As técnicas de análise de eventos são baseadas em detecção de anomalia, análise de assinaturas, análise gráfica e até um modelo de sistema de imunidade biológica tem sido proposto [30]. O mecanismo de armazenagem (“D-boxes”), é responsável por gravar a grande quantidade de informações geradas pelo gerador e analisador de eventos. Estas informações devem ser armazenadas de forma segura e de maneira tal que seja fácil o acesso a elas quando necessário. E por último, o mecanismo de contramedidas (“C-boxes”), responsável pelas ações que o sistema poderá tomar após analisar os eventos. Este mecanismo seria utilizado pelos Sistemas de Prevenção de Instrução (SPI), permitindo desde a quebra de uma conexão TCP até a modificação do filtro de um roteador. A funcionalidade deste mecanismo permite que ataques sejam identificados antes do ataque ocorrer. 38 Análise de assinaturas A maioria dos IDS’s utilizam uma técnica chamada de análise de assinaturas para identificar um ataque [30]. O termo assinatura se refere às informações sobre padrões de tráfego ou atividades da rede e seus serviços. A análise de assinatura consiste em interpretar uma série de pacotes, ou certa parte de dados contidos nestes pacotes, como um ataque. A maioria dos mecanismos de análise de assinaturas utiliza um algoritmo simples de comparação de padrões. Na maioria das vezes, o IDS simplesmente procura por uma “substring” que pode ser reconhecida nos pacotes capturados da rede. Quando estas “substrings” são encontradas em um pacote, um ataque é então identificado. Estes padrões de assinaturas são definidos em conjuntos de regras que são a base do funcionamento de um IDS. As regras, além das informações de assinatura de um ataque, contêm informações que permitem definir a metodologia do ataque em termos de identificação do invasor, como endereço de origem e destino do pacote transmitido, informações do protocolo e outros. Outras funcionalidades, como possíveis ações a serem tomadas na identificação do ataque, também são características das regras. Alguns exemplos de IDS com mecanismo de detecção de invasão baseado em assinaturas são o “Snort”, NFR 2 , “RealSecure” 3 , “Dragon” 4 e “Cisco Secure” 5 . O “Snort”, utilizado neste trabalho, é estudado com mais detalhes a seguir. Outros exemplos de metodologia de detecção de invasão utilizados são “Imune System” [12], “Control Loop Measurement” [15], “Data Mining” [31], “Statistical” [16] e Detecção de Anomalia. 3.4 “Snort” O “Snort” é um sistema de detecção de invasão de rede, de código-fonte aberto, que possui um conjunto de recursos, agrupados em um único aplicativo. Estes recursos 2 http://www.nfr.com/products/NID/ 3 http://www.checkpoint.com/products/firewall-l/realsecure.html 4 http://www.portcullis-security.com/products/index.htm 5 http://www.cisco.com/warp/public/cc/pd/sqsw/sqidsz/ 39 incluem a captura e registro de pacotes, análise de pacotes, detecção de invasão e módulos de entrada e saída. Quando o “Snort” captura um pacote que corresponde à assinatura definida em uma regra estabelecida, ele sinaliza a identificação de um ataque. Como visto adiante, várias ações podem ser configuradas após a identificação de um ataque. Originalmente, o “Snort” foi desenvolvido por Marty Roesch, em novembro de 1998, para ser um simples farejador de pacotes para seu próprio uso. O “Snort” foi desenvolvido como um aplicativo de “libcap”, o que permitia a filtragem e farejamento da rede. O “Snort” foi utilizado no início por Marty, para monitoramento de sua conexão de modem a cabo e para depuração de aplicativos de rede que ele próprio codificava. Sua primeira análise baseada em regras foi em janeiro de 1999 e em dezembro do mesmo ano foi lançada sua versão 1.5. O projeto “Snort” só foi alavancado, após um insucesso de Marty no desenvolvimento de um Sistema de Detecção de Invasão comercial. Após ficar desempregado, Marty investiu pesado no “Snort” para torná-lo mais usual e adaptável ao ambiente empresarial, e assim surge a “Sourcefire”, que viria a contratar uma equipe de desenvolvimento para desenvolver a versão 2.0 do “Snort” (sua versão atual). Em uma comparação feita com outros sistemas de detecção de invasão [25], o “Snort” apresentou vantagens: ser baseado em código-fonte aberto, requer baixo custo de implantação, ser compatível com plataforma UNIX, possuir bom desempenho, ter um grande suporte SNMP e possuir suporte para “plug-ins” de módulos de gerenciamento centralizados. 3.4.1 Funcionamento do “Snort” O “Snort” possui recursos que o tornam uma poderosa ferramenta na detecção de intrusão. Sua arquitetura é composta por quatro componentes: o farejador de pacotes, o pré-processador, o mecanismo de detecção e a saída. 40 Figura 11 – Arquitetura do “Snort” O “Snort”, pode trabalhar simplesmente como um farejador de pacotes, porém ele pode, após capturar estes pacotes, processá-los e depois fazer uma análise desses pacotes em busca de padrões que caracterizem um ataque. O funcionamento do “Snort” pode ser classificado em três modos: • Modo farejador; • Modo de registro de pacotes; • Modo de detecção de invasão; • Modo em linha. 3.4.1.1 Modo farejador Neste modo o “Snort” funciona como um farejador (“sniffer”) de pacotes, onde todo o tráfego capturado na interface de rede é exibido na tela do computador. Para isto é necessário que a interface de rede do computador, onde o “Snort” está instalado, esteja em modo promíscuo. O pacote capturado é enxergado pela interface de rede que o disponibiliza para a camada de enlace de dados, camada dois do modelo OSI. Os pacotes de dados então são disponibilizados para o mecanismo de decodificação do “Snort”, que decodificará os dados brutos recebidos. Este procedimento é realizado pela biblioteca chamada “libcap”. 41 A biblioteca “libcap” foi desenvolvida inicialmente como parte do “TCPDump”, programa que futuramente seria substituído pelo “Snort”. Esta biblioteca captura os pacotes diretamente da placa de rede, permitindo que os mesmos sejam decodificados, exibidos e registrados. O seguinte comando permite que sejam exibidos os cabeçalhos da camada de transporte (TCP, UDP e ICMP), da camada de rede (IP) e da camada de enlace de dados: # Snort -vde Os farejadores de pacote têm vários usos [13]: • Análise, diagnóstico e solução de problemas de rede; • Análise e comparativo de desempenho; • Intromissão para obter senhas em texto puro e outros dados interessantes. 3.4.1.2 Modo de registro de pacotes Um outro modo de funcionamento do “Snort” é o de registro de pacotes, que consiste em gravar os pacotes no disco rígido. Este modo de funcionamento é bastante similar ao modo de farejamento, porém todo tráfego capturado na interface de rede, ao invés de ser exibido na tela do computador, é enviado a um arquivo de “log” para uma posterior análise. O seguinte comando permite que os dados capturados sejam gravados no arquivo de “log” chamado ‘log_Snort’ do diretório corrente: # Snort -de -l ./log_Snort Assim como no modo de farejamento, o modo de registro permite que, através das informações capturadas da rede, sejam feitas análises e diagnósticos para resolução de problemas de rede e análise e comparativo de desempenho. Este modo também permite que as informações capturadas sejam utilizadas para fins maliciosos, como por exemplo a intromissão para obter senhas em texto puro ou obtenção de dados da rede. 42 3.4.1.3 Modo de detecção de intrusão Este modo é o principal modo de funcionamento do “Snort”. Ele recebe os dados provenientes do pré-processador e os verifica baseado num conjunto de regras. O pré-processador é um importante recurso do “Snort” que permite que funcionalidades como a detecção de anomalia e a manutenção de estado de uma conexão sejam implementadas, e não apenas a simples correspondência de número e string com relação a padrões simples, mantendo o desempenho do sistema. Os pré-processadores manipulam os dados do pacote após o decodificador do “Snort” ter analisado os campos do pacote, mas antes que o mecanismo de detecção de intrusão comece a fazer comparação de regras. Eles podem aumentar muito a funcionalidade da base de correspondência de regra do “Snort” [13]. Os principais objetivos dos pré-processadores são: a remontagem de pacotes, a decodificação de protocolos e a detecção não baseada em regra ou baseada em anomalia. O mecanismo de detecção recebe os dados provenientes do pré-processador. Estes dados, após serem decodificados, são comparados com um conjunto de regras definidas. Se esta comparação encontrar uma correspondência dos dados recebidos com as regras, o pacote é então enviado para ser registrado ou para uma ação de alerta. Se não houver correspondência, o mesmo é ignorado. As regras são baseadas em texto e, geralmente, são armazenadas em um diretório do “Snort”, sendo classificadas em diferentes grupos. O “Snort” lê os arquivos de regras e gera uma lista tridimensional, que é utilizada para comparar pacotes para detecção. Esta lista tridimensional pode ser definida como sendo um algoritmo de armazenamento das regras e suas opções, a partir de onde o “Snort” procura por uma correspondência de cabeçalho e padrão. As regras são compostas de duas partes: • O cabeçalho da regra, que contém as seguintes informações: o a ação de executar (“log” ou alerta); o o tipo de protocolo (TCP, UDP, ICMP e etc); 43 o informações de origem e destino. • A opção ou miolo da regra, que contém os dados que serão utilizados na comparação para que ele corresponda à regra. Cabeçalho da regra Os cabeçalhos identificam qual ação deverá ser tomada quando uma correspondência de regra for encontrada, qual o tipo de protocolo deve ser usado e as informações de origem e destino, incluindo endereço IP, endereços de redes CIDR (“Classless Inter Domain Routing”) e portas de comunicação. Figura 12 – Cabeçalho da regra. Durante a análise dos dados do pacote, uma correspondência de regra pode ser encontrada. O “Snort” tem então cinco opções de ações que podem ser tomadas e também permite que o usuário crie suas próprias regras. Estas opções devem ser especificadas na montagem da regra, são elas: • Pass - o pacote é ignorado; • Log - o pacote é registrado conforme especificado; • Alert - o pacote é registrado e uma mensagem de alerta é enviada; • Activate - gera um alerta e depois inicia uma regra dinâmica especificada; • Dynamic - é disparado pela ação “activate” para o registro de um número determinado de pacotes. Esta opção é útil quando se deseja que o “Snort” registre os pacotes após um ataque ser detectado. 44 O modo alerta precisa ser bem configurado para que não seja um incômodo para o administrador da rede. As mensagens devem ser otimizadas ao máximo. Existem vários modos de alerta que o “Snort” utiliza. Os principais são [5]: • Modo de alerta “Fast” - O alerta é registrado no formato simples com uma indicação de tempo, a mensagem de alerta, portas e IP's de origem e destino. Comando: -A fast. • Modo de alerta “Full alert mode” - Modo de alerta padrão com as mensagens de alertas e os cabeçalhos dos pacotes. Comando: -A full. • Modo de envio de alerta para soquetes UNIX que outros programas podem. Comando: -A unsock. • Modo de alerta desligado. Comando: -A none. • Modo de alerta que envia alertas para a tela do computador. Comando: -A console. • Modo que gera alertas “cmg style”. Comando: -A cmg. Abaixo, tem-se o exemplo de uma linha de comando do “Snort” , no modo de detecção. Os dados serão registrados no diretório padrão ‘/var/log/Snort’, porém um outro local poderia ser especificado. O arquivo ‘Snort.conf’ é o arquivo que contém as regras configuradas que serão utilizadas para a comparação com os dados capturados. # Snort -d -l -h 164.23.1.0/24 -c Snort.conf Já na linha de comando abaixo, o “Snort” registrará as ocorrências no diretório ‘/var/log/Snort’ e enviará os alertas para um arquivo de alerta do tipo “fast”. # Snort –c Snort.conf –A fast –h 192.50.128.33/24 A segunda parte da regra especifica qual o tipo de protocolo será suportado pela regra (ICMP, TCP, IP, UDP, HTTP, ARP e 802.11). Apenas um protocolo pode ser definido por regra. A terceira e última parte da regra especificam as informações de origem e destino, ou seja, a atribuição de endereço IP e portas de comunicação. A atribuição de endereços IP pode ser feita utilizando endereços IP individuais ou endereços CIDR. 45 O operador “!” deve ser utilizado associado a um endereço IP ou endereço CIDR para negar um determinado valor. No exemplo abaixo se pode observar uma aplicação das opções do cabeçalho de uma regra. Neste exemplo a regra é definida para que sejam registrados todos os pacotes TCP de qualquer porta de origem de uma rede de origem diferente da definida tendo como destino o endereço IP 192.168.100.34 502 e porta 502. log tcp !192.168.50.0/24 any -> 192.168.100.34 502 O “Snort” permite também que sejam definidos mais endereços IP e portas de origem ou destino em uma mesma regra. Para isto é necessário incluir os endereços IP ou portas entre colchetes e separados por vírgula. Outra funcionalidade é a definição de intervalos de portas, onde se especifica o número de porta mínimo e máximo. alert tcp [192.168.50.2, 192.168.50.3, 192.168.50.4] any -> 192.168.100.34 502:1000 Miolo da regra O miolo da regra é o recurso do “Snort” que contém as informações utilizadas na comparação com o pacote capturado na identificação do ataque. Ele é dividido em seções separadas por ponto-e-vírgulas, sendo que cada seção define uma opção, que possui um valor. No exemplo a seguir, pode ser observado, em parênteses, o miolo de uma regra com suas opções. alert tcp any any -> 192.168.1.0/24 111 (content:”|00 01 86 a5|”: msg “mountd acces”;) Existem várias opções que podem ser definidas em uma mesma regra. A seguir serão listadas as principais opções, que serão utilizadas na construção das regras [13]. • Controle de fluxo (“flow”) – permite que seja definida a direção do pacote em relação aos fluxos de comunicação cliente-servidor. Funciona coordenada com o módulo de remontagem de TCP e permite que a regra distinga conteúdo e direção de pacote em relação à arquitetura cliente-servidor. Esta opção aumenta a funcionalidade do IDS, pois não é necessário definir direção de pacotes na camada IP. Existem aproximadamente oito opções de controle de fluxo: to_server, from_server, to_cliente, from_client, only_stream, no_stream, established e stateless. O formato desta opção é: flow :<opção>. 46 • Conteúdo (“content”) – esta é a opção mais poderosa e importante do “Snort”, pois é onde é feita a análise da matriz de choque do pacote para identificar um conteúdo potencialmente danoso. As matrizes de choque podem ser analisadas através de valores binários, ASCII ou uma combinação dos dois. O formato desta opção é: “content”: “string”. Para conteúdos binários, os dados hexadecimal devem ser escritos entres caracteres de “pipe” ( | ). • “Offset” – esta opção diz ao mecanismo do “Snort” para começar a procurar a string de conteúdo a partir do valor de “offset” definido. O formato desta opção é: “offset”: <número_de_bytes>. • “Depth” – este modificador define o número de bytes que o mecanismo do “Snort” deve analisar. O formato desta opção é: “depth”: <número_de_bytes>. • Mensagens (“msg”) – esta opção é utilizada para informar ao administrador da rede sobre o tipo de vulnerabilidade, ameaça ou ataque que foi identificado. O formato desta opção é: “msg”: “descrição_da_ocorrência”. • Comprimento ou intervalo (“dsize”) – esta opção especifica o comprimento ou o intervalo de comprimento da matriz de choque de um pacote. Os sinais de < e > são utilizados para especificar os intervalos para comprimento da matriz de choque maior ou menor que o valor especificado e o sinal <> para especificar um intervalo entre valores especificados. O formato desta opção é: “dsize”:(<,> ou nada) comprimento (<> comprimento). 3.4.1.4 Modo em linha Para a versão 2.3.0, ou superior, do “Snort” foi adicionada a funcionalidade de o sistema trabalhar como um Sistema de Prevenção de Intrusão (IPS). Esta funcionalidade permite ao “Snort” atuar integrado com o “Iptables” [21], permitindo que este possa rejeitar pacotes indesejáveis. Um “Snort” no modo em linha atua de maneira bastante semelhante a um “firewall” ativo, porém, com algumas vantagens adicionais. Um IPS pode não apenas bloquear uma comunicação de um endereço IP ou uma porta de comunicação específica, mas 47 também descartar pacotes que contenham a assinatura de um ataque. Estas são as três regras utilizadas com o “Snort” em modo em linha [5]: • “Drop” – esta regra solicitará ao “iptables” descarte o pacote e registrará a ocorrência de acordo com os próprios recursos do “Snort”. • “Reject” – esta regra solicitará ao iptables para descartar o pacote, registrará a ocorrência de acordo com os próprios recursos do “Snort” e enviará um TCP “reset” se for uma conexão TCP ou uma mensagem icmp de porta inalcançável se o protocolo for UDP. • “Sdrop” – esta regra solicitará ao iptables apenas para descartar o pacote. Nenhum registro será feito. Neste trabalho, não será estudado o “Snort” no modo em linha. 3.5 O uso de um sistema de detecção de invasão no ambiente industrial A seção anterior abordou as maneiras seguras de se projetar uma rede utilizando um IDS. No ambiente de automação industrial, esta ferramenta tem basicamente duas importantes aplicações, que são demonstradas nas figuras 13 e 14. 48 Figura 13 – Arquitetura de rede integrada. Na primeira aplicação, o IDS é instalado no segmento de rede entre a rede corporativa e a rede de nível de controle e supervisão da rede de automação industrial, em conjunto com um “firewall”. Esta aplicação monitora o tráfego de pacotes de dados entre a rede corporativa e a rede de automação. O “firewall” tem o papel do filtro de pacotes, bloqueando uma comunicação IP ou porta específica não autorizada. A grosso modo, pode-se dizer que o “firewall” bloqueia ou permite a passagem do pacote sem saber o dado que está dentro. Já o IDS fornece condições para detecção de comportamentos e conteúdos anormais dos pacotes de dados. Esta detecção é baseada na análise comparativa destes dados com suas regras ou assinaturas definidas. O IDS após a 49 liberação do pacote pelo “firewall”, verifica o pacote em busca de assinaturas que se enquadrem como um ataque. Para esta primeira aplicação, a maioria dos IDS’s encontrados no mercado atendem às necessidades deste trabalho, pois todos os protocolos a serem analisados são os mesmos de uma rede corporativa. É extremamente importante que o tráfego entre as duas redes sejam rigorosamente monitorados e controlados. Em uma segunda aplicação, um IDS é utilizado num segmento de rede nível 2 do ambiente de automação industrial, ou seja, entre os dispositivos de controle e as estações de operação e supervisão. Esta é uma área pouco explorada atualmente pelos responsáveis pelas áreas de automação industrial por várias razões, mas não deixa de ser crucial para o negócio de uma empresa. Muitas redes industriais estão hoje vulneráveis pelo simples fato de não se ter conhecimento do tipo de dados que trafegam em sua infra-estrutura. 50 Figura 14 - IDSR num segmento do nível de controle e supervisão Os protocolos específicos de automação industrial foram concebidos para ambientes fechados e isolados. Porém, hoje a maioria dos sistemas vive em ambientes compartilhados e integrados. Os ambientes fechados, com softwares proprietários, migraram para os ambientes compartilhados, onde impera os softwares de protocolo aberto, que permitem a integração de várias plataformas e ambientes diversos. É verdade que, no mundo de automação, ainda existam muitos softwares baseados em protocolos proprietários, mas cada vez mais, os padrões abertos, como OPC e Modbus ganham força. Alguns motivos para se utilizar um IDS num segmento do nível de controle e supervisão de um ambiente de automação industrial: 51 • Convivência de vários padrões em uma mesma rede; • Em muitos casos, existe o compartilhamento do meio físico de uma infraestrutura de rede pelos ambientes corporativos e de automação industrial; • Possibilidade crescente de ataques contra as instalações industriais sejam eles de origem externa ou interna, intencionais ou não intencionais; • Atualmente a quase totalidade dos novos sistemas de automação estão sendo desenvolvidos na plataforma Windows, o qual possui uma grande gama de pessoas “especializadas” em seus recursos e possui uma série de vulnerabilidades que são a todo instante exploradas; • A maioria dos protocolos de automação industrial foi desenvolvida sem levar em conta os requisitos de segurança da informação. É importante ressaltar que os requisitos de segurança para um ambiente corporativo são diferentes dos requisitos para um ambiente de automação industrial. A implantação de um IDS neste segmento de um ambiente industrial, ainda tem uma série de limitações que precisam ser tratadas, como: • A falta de IDS’s desenvolvidos e disponíveis em mercado para protocolos não IP específicos da área de automação industrial, como: FieldBus, Profibus, DeviceNet e muito outros; • A falta de IDS’s desenvolvidos e disponíveis em mercado para protocolos IP específicos da área de automação industrial, como: Modbus/TCP, OPC, Ethernet/IP, ProfiNet e outros; • O grande consumo de recurso para gerenciar as informações disponibilizadas por um IDS nos vários segmentos de um típico ambiente de automação industrial. Existem uma grande variedade de protocolos proprietários e protocolos abertos, e uma grande variedade de aplicações nas indústrias; • A falta de conhecimento e experiência no suporte e configuração de IDS’s pelo pessoal de automação industrial. 52 4 MODBUS/TCP 4.1 Introdução O Modbus é um protocolo de comunicação entre dispositivos cliente e servidores em redes de automação industrial. Criado em 1979, quando foi lançado o Modbus serial. O Modbus sobre TCP/IP, segundo o “ARC Advisory”, apesar de apenas 9 anos desde sua criação, é considerado o protocolo com mais pontos de rede vendidos por ano. Há a tendência destes números crescerem cada vez mais, pois a cada ano que passa, mais e mais equipamentos “Ethernet” são comercializados no mundo inteiro. O Modbus consiste de um protocolo da camada de aplicação, posicionado na camada 7 do modelo OSI, que provê uma comunicação entre vários dispositivos cliente e servidor conectados em diferentes barramentos ou redes de automação industrial. [18] Este protocolo pode ser implementado sobre: um meio de transmissão serial assíncrona, Ethernet e outros, como demonstrado na figura 15. Camada de Aplicação Modbus Modbus/TCP TCP IP Outro Modbus+ / HDLC Mestre/Escravo Ethernet – 802.3 Outro Camada Física EIA/TIA – 232 EIA/TIA-485 Ethernet Camada física Figura 15– Implementação do protocolo Modbus. 53 O padrão de comunicação é um simples mecanismo de requisição e resposta, muito similar ao http ou SNMP, onde o mestre (cliente) inicia a comunicação enviando uma requisição a um ou mais escravos (servidores). Dispositivos mestres podem ser CLP’s, estações de trabalho, mainframes, IHM's ou outros equipamentos de E/S (entrada e saída). O protocolo Modbus serial usa tipicamente o meio de transmissão serial RS-232/485 e tem duas implementações primárias: Modbus ASCII e Modbus RTU. Modbus/TCP é o terceiro protocolo Modbus o qual trouxe Modbus para o mundo IP. Modbus/TCP é comumente utilizado por controles Active X ou Java Applets, onde um usuário pode se conectar ao servidor “web” embutido no CLP, ou outro dispositivo de campo, e acessar os dados de processo via um “browser” qualquer. Uma rápida descrição do protocolo sobre um meio de transmissão serial será feita, porém o propósito deste capítulo é descrever a especificação do protocolo de aplicação Modbus/TCP. Por se tratar um protocolo de padrão aberto, vários fornecedores de equipamentos têm desenvolvido drivers de comunicação para Modbus. Um exemplo comum de aplicações deste protocolo é na integração de sistemas de fornecedores distintos, como uma aplicação onde se faz necessário interligar um dispositivo de campo, como um CLP SLC500 (Rockwell), a um sistema SCADA iFix (Intelution), na sala de controle. 4.2 Protocolo de Aplicação Modbus 4.2.1 Descrição O protocolo Modbus, na camada de aplicação (tendo o modelo OSI como referência), define uma simples PDU (do inglês, “Protocol Data Unit”), cujo conteúdo é transparente para a camada inferior. Esta PDU é enviada para a camada inferior, onde serão acrescidas novas informações ou campos na ADU (do inglês, “Application Data Unit”), dependendo do meio físico em questão (Ethernet, serial e outros). 54 Figura 16 – Pacote Modbus Genérico. A PDU do protocolo de aplicação Modbus é composta pelo campo de dados e pelo campo código de função. Esta PDU é definida pela aplicação cliente, que inicia uma transação com o servidor através de uma requisição. O campo de código de função especifica qual o tipo de requisição está sendo feita pelo cliente e qual ação deve ser tomada pelo servidor. O tamanho da PDU de um protocolo de aplicação Modbus é limitado pela primeira implementação Modbus sobre um meio de transmissão serial RS485, que é de 256 bytes. O campo código de função é definido em um byte, tendo uma faixa decimal de 1 a 255. Esta campo é divido em três categorias: código de função públicos, código de função definidos pelo usuário e códigos de função reservados. Cada uma destas categorias será abordada com mais detalhe no item 4.2.3. O campo de dados, enviado pelo cliente ao servidor, contém as informações complementares ao código de função que são utilizadas pelo servidor para processar a requisição. Em alguns casos, o campo de dados pode ser nulo. Isto porque apenas o código da função é suficiente para o servidor entender e processar a requisição. Ao receber a requisição enviada pelo cliente, o servidor processa a requisição e, se nenhum erro ocorrer, prepara um quadro de resposta com os dados requisitados. Este quadro tem a mesma estrutura do quadro de requisição: campo código de função e campo de dados. Em caso de erro, o servidor prepara e retorna um quadro contendo uma resposta de exceção indicando ao cliente o tipo de erro ocorrido. 55 Figura 17 – Modelo de transação Modbus entre Cliente e Servidor. Figura 18 – Modelo de transação Modbus entre Cliente e Servidor com código de exceção retornado. 56 De acordo com a Especificação do Protocolo de aplicação Modbus V 1.1a, três PDU’s são definidas, sendo elas: 1. Requisição Modbus PDU, mb_req_pdu 2. Resposta Modbus PDU, mb_rsp_pdu 3. Resposta de Exceção Modbus PDU, mb_excep_rsp_pdu A PDU mb_req_pdu é definida desta maneira: mb_req_pdu = {function_code, request_data}, onde: function_code = [1 byte] código de função Modbus especificado pelo cliente request_data = [n bytes] Este campo está relacionado ao campo de função e geralmente contém informações como referências de variáveis, contadores, “offsets” de dados, códigos de sub-função e outros. A PDU mb_rsp_pdu é definida desta maneira: mb_rsp_pdu = {function_code, response_data}, onde: function_code = [1 byte] código de função Modbus response_data = [n bytes] Este campo, como na requisição, está relacionado ao campo de função e geralmente contém informações como referências de variáveis, contadores, “offsets” de dados, códigos de sub-função e outros. A PDU mb_excep_req_pdu é definida desta maneira: mb_excep _rsp_pdu = {function_code, request_data}, onde: function_code = [1 byte] código de função Modbus + 0x80 request_data = [n bytes] Este campo contém o código da exceção retornada pelo servidor ao cliente. 57 4.2.2 Base de dados Modbus O modelo da base de dados Modbus é baseada numa série de tabelas com características diferentes. As quatro tabelas primárias são: Tabelas primárias Tipo de objeto Tipo Comentários Entradas discretas Bit simples Leitura apenas Este tipo de dado é geralmente provido por um dispositivo de entrada e saída (E/S). Saídas discretas (Bobinas) Bit simples Leitura e escrita Este tipo de dado pode ser alterado por uma aplicação. Registros de entrada Palavra de 16 bits Leitura apenas Este tipo de dado é geralmente provido por um dispositivo de entrada e saída (E/S). Registros de saída Palavra de 16 bits Leitura e escrita Este tipo de dado pode ser alterado por uma aplicação. Tabela 02 – Modelo de dados. 4.2.3 Descrição dos códigos de função do Modbus Como descrito no item 4.2.1, o campo de código de função é responsável por identificar o tipo de requisição que está sendo feita pelo cliente e qual ação deve ser tomada pelo servidor. Este campo é divido em três categorias: ‘códigos de função públicos’, ‘códigos de função definidos pelo usuário’ e ‘códigos de função reservados’. Todos os códigos de função da categoria ‘códigos de função públicos’ são validados e documentados pela comunidade MODBUS-IDA.org. Torna-se um padrão para todos os fornecedores e fabricantes de equipamentos Modbus, tendo a garantia de cada código ser único. Esta categoria compreende os códigos já especificados e um range de códigos disponíveis para especificação. 58 Já a categoria ‘código de função definidos pelo usuário’, como o próprio nome diz, é um espaço reservado para a necessidade dos usuários de definirem códigos de função conforme suas necessidades. Neste caso, cada usuário define o seu padrão e não há a garantia da unicidade dos códigos. Fornecedores diferentes podem utilizar um mesmo código, porém com funções totalmente distintas. Existe uma categoria de código, chamada de ‘códigos de função reservados’, que são utilizados por empresas para especificação de produtos e que não estão disponíveis para o uso público. A tabela abaixo descreve os ‘códigos de função públicos’ mais comumente utilizados pelos fornecedores e fabricantes. Como se pode observar, alguns códigos definem dentro de sua faixa códigos de sub-função. Código de função Código Entrada discreta física Bit de acesso Bits internos ou Bobinas físicas 16 bits de acesso Registros internos ou Registros de saídas físicas Acesso a arquivos Diagnósticos Outros (hex) Leitura de entradas discretas 02 02 Leituras de status de bobinas 01 01 Bits de escrita simples 05 05 Bits de múltipla escrita 15 0F 04 04 Leitura de registros Holding 03 03 Escrita de registro de saída 06 06 Escrita de registro múltiplos 16 10 Leitura/escrita de registro múltiplos 23 17 Escrita de registros de máscara 22 16 Leitura de fila FIFO 24 Leitura de arquivo 20 6 14 Escrita de arquivo 21 6 15 Leitura de status de exceção 07 Diagnóstico (Modbus serial) 08 Obtenção de contador de evento COM 11 0B Obtenção de contador de evento “log” 12 0C Retorna o ID do escravo 17 11 Leitura de identificação do dispositivo 43 14 2B Interface encapsulada de transporte 43 13, 14 2B Referência geral CANopen 43 13 2B Registros de entrada físicos Leitura de registros de entrada Dados de acesso Subcódigo Tabela 03 – Códigos e sub-códigos de função. 18 07 00-18,20 08 59 4.2.4 Resposta de exceção Modbus Como visto anteriormente, a comunicação entre um dispositivo cliente e um dispositivo servidor se dá através de requisições e respostas. As requisições são enviadas pelo cliente ao servidor, que esperam uma resposta do servidor com os dados solicitados. Esta resposta esperada é enviada se o servidor receber a requisição e executá-la normalmente. Porém, alguns problemas podem ocorrer e o servidor pode ou não enviar a resposta. Um problema de comunicação pode ocorrer e o servidor não receber a requisição enviada pelo cliente. Deste modo ele não retornará nenhuma resposta, e o cliente provavelmente processará um erro por tempo expirado. Se o servidor recebe a requisição, porém detecta um problema de comunicação (erro de paridade, CRC e outros) não retorna nenhuma resposta. O mesmo erro por tempo expirado provavelmente será detectado pelo cliente. E por último, se o servidor recebe a requisição sem problema de comunicação, porém não consegue executá-la, é preparada uma resposta de exceção, informando o tipo de erro ocorrido, que é enviada ao cliente. Quando uma mensagem de exceção é preparada, o campo de código de função e o campo de dados são alterados. No campo de código de função, o bit mais significativo do código é alterado para 1. O valor do código então é acrescido, em relação ao valor original, de um valor hexadecimal igual a 80. Com o bit mais significativo do código habilitado, o cliente pode entender que a resposta se trata de uma exceção e pode analisar o campo de dados, que contém o código da exceção, conforme tabela 04. Código Exceção Comentários 01 Função ilegal O código de função é desconhecido pelo servidor. 02 Endereço de dados ilegal O endereço do dado recebido não é um endereço válido para o servidor. 60 03 Valor de dados ilegal O valor contido no campo de dados não é um valor válido para o servidor. 04 05 Falha no dispositivo escravo O servidor falhou durante a execução (servidor) de uma requisição. Reconhecimento O servidor aceitou a invocação do serviço, mas tomará um longo tempo para executá-lo. É retornado um reconhecimento de aceite do serviço. 06 Dispositivo escravo (servidor) O servidor estava impossibilitado de ocupado aceitar a requisição. A decisão de se a mensagem será enviada e quando, cabe ao cliente. 08 Erro de paridade da memória O servidor detectou um erro de paridade nos dados em memória. 0A Caminho do “gateway” O “gateway” não conseguiu indisponível estabelecer uma comunicação interna entre a porta de entrada e a porta de saída no processo da requisição. 0B Falha de resposta do dispositivo Indica que não foi possível obter “gateway” de destino resposta do “gateway” para qual a requisição foi enviada. Tabela 04 – Código de exceção. 61 4.3 Modbus serial (RTU) Inicialmente o protocolo Modbus foi desenvolvido para os meios físicos seriais: EIA/TIA-232 ou EIA/TIA-485, posicionando-se, no seu equivalente do modelo OSI, na camada dois (camada de enlace). Camada 7 6 5 4 3 2 1 Modelo OSI Aplicação Apresentação Sessão Transporte Rede Enlace Física Protocolo de aplicação MODBUS Vazio Vazio Vazio Vazio MODBUS Serial EIA/TIA-485 ou EIA/TIA232 Figura 19 – Modelo em camadas. O protocolo Modbus serial line é um protocolo mestre x escravo. Numa rede Modbus apenas um mestre é conectado ao barramento. Este mestre é responsável por iniciar a comunicação com o nó escravo e enviar as requisições aos nós escravos do barramento. Apenas uma comunicação é inicializada no intervalo de tempo. Um nó escravo nunca pode transmitir dados sem receber uma requisição de um nó mestre. Esta comunicação é definida como sendo determinística. O número máximo de dispositivos escravos que podem ser conectados em um barramento é de 247 escravos. Isto é causado pela limitação do campo de endereçamento do protocolo. O dispositivo mestre, em uma rede Modbus, faz requisições aos nós escravos de dois modos: unicast e no modo broadcast. No primeiro, o mestre endereça uma requisição a um determinado nó escravo da rede. O escravo recebe a requisição, processa e retorna ao mestre. No segundo modo, o mestre endereça a requisição a todos os nós escravos da rede. O endereço “0” é utilizado para indicar este modo de requisição. Neste modo os escravos recebem a requisição, mas não enviam uma resposta. Requisições deste modo são usadas para comandos de escrita. 62 Figura 20 – Modo de comunicação unicast. Figura 21 – Modo de comunicação broadcast. 0 Endereço de broadcast De 1 a 247 Endereçamento de dispositivos escravos Figura 22 – Endereçamento Modbus RTU. De 248 a 255 Reservado 63 4.4 Modbus/TCP 4.4.1 Modelo Cliente x Servidor Uma comunicação Modbus/TCP requer o estabelecimento de uma conexão TCP entre um cliente e um servidor. Através desta conexão, o Modbus/TCP provê um serviço de comunicação cliente / servidor entre dispositivos conectados em uma rede Ethernet TCP/IP. Este modelo é baseado em quatro tipos de mensagens [19] (figura 23): • Requisição Modbus - é a mensagem de requisição enviada pelo cliente ao servidor, iniciando a transação. • Confirmação Modbus - é a mensagem de resposta recebida pelo cliente. • Indicação Modbus - é a mensagem de requisição recebida pelo servidor. • Resposta Modbus - é a mensagem de resposta enviada pelo servidor. Figura 23 – Serviço de mensagem Modbus. Este serviço de comunicação é usado para troca de informação em tempo real em redes de automação industrial entre: duas aplicações de dispositivos diferentes; uma aplicação de um dispositivo e outro dispositivo; uma aplicação SCADA e um dispositivo; e um computador e um programa de um dispositivo provendo serviços, como pode ser observado na figura 24. 64 Figura 24 – Exemplo de aplicações Modbus. Da mesma forma que no modo serial, no Modbus/TCP o cliente é quem inicia a comunicação com o servidor através de uma requisição. Esta requisição é composta de uma PDU contendo um campo com o código da função e um campo com os dados (figura 25). Existem significativas diferenças entre o protocolo Modbus serial e o protocolo Modbus/TCP. No Modbus/TCP, um cabeçalho é adicionado à PDU da camada de aplicação, que é usado com o objetivo de identificar a ADU Modbus. Este cabeçalho é chamado de MBAP (do inglês, “Modbus Application Protocol Header”). As diferenças existentes entre a ADU do Modbus serial e a ADU do Modbus/TCP são necessárias para adaptar o protocolo Modbus ao TCP. Figura 25 –Pacote Modbus/TCP. 65 A responsabilidade pelo endereçamento dos dispositivos da rede, que antes era do Modbus serial, através do campo Endereço, agora fica com a camada de transporte e com a camada de rede do TCP/IP. Na camada de transporte TCP é padrão a utilização da porta de comunicação 502. E na camada de rede, um endereço IP é definido. No cabeçalho MBAP é adicionado um campo ‘Identificador de unidade’ para o caso de comunicação de dispositivos numa rede Ethernet com dispositivos numa rede serial, através de dispositivos como pontes, roteadores ou “gateways”. O cabeçalho MBAP contém, além do campo ‘Identificador de unidade’ mencionado no parágrafo acima, outros três campos. São eles: ‘Identificador da transação’, ‘Identificador de protocolo’ e ‘tamanho’. 4.4.2 Modelo da arquitetura Modbus/TCP Figura 26 – Modelo de arquitetura Modbus. Este modelo de arquitetura apresentado é um modelo geral proposto pela comunidade Modbus-IDA. Este modelo inclui componentes de Modbus clientes e servidores que são aplicáveis em qualquer dispositivo. 66 Como aplicação do usuário, podemos definir como qualquer programa de um dispositivo de controle e ou monitoração. Podemos citar como exemplos: CLP’s, sistemas SCADA, SDCD’s, IHM's, dispositivos simples de entrada e saída e outros. A seguir são descritas os componentes desta arquitetura. Componente de gerenciamento da conexão TCP O estabelecimento de uma conexão TCP pode ser implementado pela aplicação usuário ou automaticamente pelo módulo de gerência de conexão TCP (figura 27). No primeiro caso, todas as conexões TCP são gerenciadas pela aplicação usuário: estabelecimento ativo e passivo, encerramento de conexão, etc. Esta solução provê uma maior flexibilidade e liberdade de programação. É necessária porém, uma atenção ao número de conexões que podem ser estabelecidas entre clientes e servidores. Este número deve levar em conta a capacidade do sistema. Já no segundo caso, o gerenciamento da conexão é totalmente transparente para a aplicação usuário, que apenas tem a incumbência de enviar e receber mensagens. O gerenciador de conexão TCP é responsável por abrir e encerrar as conexões sob demanda. 67 Figura 27 - Diagrama de atividade do gerenciamento de conexão TCP [19]. Como pode ser observado na figura 28, o serviço de mensagens Modbus utiliza a porta de comunicação 502, que permite o estabelecimento de conexões e troca de dados com outros dispositivos. Quando um dispositivo precisa trocar dados com um dispositivo remoto, é aberta uma conexão com este dispositivo na porta 502. A porta local do dispositivo remoto deve ser maior que 1024 e deve e ser diferente para cada conexão. Figura 28 – Estabelecimento de conexão Modbus TCP. Uma requisição Modbus é enviada pelo dispositivo cliente após o estabelecimento da conexão TCP. Várias conexões TCP entre um cliente e um servidor podem ser estabelecidas. Se o número de conexões TCP ativas alcança o número limite, a conexão 68 mais velha é encerrada. Um cliente pode iniciar uma transação Modbus com um servidor sem esperar o fim de uma transação anterior. Figura 29 - Troca de dados Modbus. 69 Camada de comunicação da aplicação Um dispositivo Modbus pode prover uma interface Modbus cliente e ou servidor e uma interface Modbus “Backend”. Quatro áreas compõem esta interface: entrada discreta, saída discreta (bobina), registros de entrada e registros de saída. Modbus Cliente O seguinte diagrama de atividade, definido pela comunidade Modbus-IDA, descreve o comportamento esperado por um Cliente Modbus. Figura 30 - Diagrama de atividades Cliente Modbus [19]. Um cliente Modbus deve ser capaz de tratar três tipos de eventos: 1. Uma nova demanda oriunda da aplicação usuário de enviar uma requisição de dados ao servidor. A requisição é entregue à camada inferior, ou seja, a camada de transporte TCP, que é responsável por entregá-la ao servidor de origem. Um suporte a erros de conexão é suportado pelo protocolo TCP. Esta transação é transparente para a camada de aplicação Modbus. 70 2. Uma resposta do gerenciamento TCP, que requer uma análise do conteúdo da resposta pelo cliente. Uma confirmação, positiva ou negativa, deve ser enviada a aplicação usuário. 3. A espera por uma resposta do servidor. Se o tempo determinado de espera expirar, o cliente pode retransmitir a requisição ‘n’ vezes. Quando este número de tentativas esgotar, uma confirmação negativa deve ser enviada a aplicação usuário. Algumas tentativas de retransmissão da mensagem podem ser feitas pela camada de reconhecimento TCP. A construção de uma requisição Modbus pode ser dividida em quatro fases (figura 31): instanciação da transação Modbus, codificação da PDU, codificação do cabeçalho MBAP e envio da requisição para o gerenciador TCP. A instanciação de uma transação Modbus permite ao cliente memorizar todas as informações requeridas pela aplicação usuário. Assim ele é capaz de receber a resposta com os dados enviados pelo servidor e enviar a resposta à aplicação usuário. A requisição é preparada pelo cliente de acordo com as informações repassadas pela aplicação usuário. A PDU é codificada e preenchida conforme vimos no item 4.4.1. E a ADU é o resultado da adição do cabeçalho MBAP à PDU. 71 Figura 31 - Diagrama de atividades de preparo de uma requisição [19]. O cabeçalho MBAP contém, os campos: ‘Identificador de unidade’, ‘Identificador da transação’, ‘Identificador de protocolo’ e ‘tamanho’. O campo ‘Identificador de unidade’ é utilizado para fins de roteamento entre um dispositivo Modbus/TCP e um Modbus serial. Este campo leva o valor do endereço do dispositivo escravo de uma rede Modbus serial. Quando um dispositivo Modbus/TCP precisa se conectar com um dispositivo Modbus serial através de uma ponte (“gateway”), o endereço IP de destino é o endereço da ponte. E a ponte utiliza o endereço descrito no campo ‘Identificador de unidade’ para encaminhar a requisição ao dispositivo escravo da rede Modbus serial. Se em uma rede, utiliza-se apenas endereçamento IP, é recomendado se utilizar um endereçamento sem valor significativo (0xFF), ou então o valor zero (0). O campo ‘Identificador da transação’ é utilizado para identificar uma comunicação entre um cliente e um servidor. O servidor copia em sua resposta o identificador 72 recebido na requisição. Em uma conexão TCP, espera-se que o valor deste campo seja único. E o campo ‘tamanho’ é utilizado para indicar a quantidade de bytes seguintes do pacote, incluindo o ‘Identificador de unidade’ e o ‘Campo de dados’. Campos Tamanho Cliente Servidor Identificador de 2 Bytes Define o valor do Copia o valor da requisição campo. recebida em sua resposta. Define o valor do Copia o valor da requisição campo. recebida em sua resposta. Define o valor do Define o valor do campo campo (requisição). (resposta). Define o valor do Copia o valor da requisição campo. recebida em sua resposta. Transação Identificador de 2 Bytes protocolo Tamanho Identificador de 2 Bytes 1 Byte Unidade Tabela 05 – Campos do cabeçalho MBAP. Como mostrado na tabela acima, o valor total de um cabeçalho MBAP é de 7 bytes. Quando um quadro de resposta é recebido em uma conexão TCP, o campo ‘Identificador da transação’ é utilizado para associar a resposta com a requisição enviada. Se nenhum valor de resposta é associado a uma requisição, o quadro é descartado. E se o valor do campo é associado a uma requisição, a resposta é processada para que uma confirmação, negativa ou positiva, seja encaminhada a aplicação usuário. Após a verificação do campo ‘Identificador da transação’, o campo tamanho fornece o tamanho da resposta Modbus. Então o código de função e o campo de dados devem ser analisados. Três situações podem ocorrer. Se o código de função verificado é o mesmo da requisição e o formato da resposta está correto, então uma mensagem de confirmação positiva é retornada a aplicação usuário. Se o código de função verificado é uma exceção (código de função + 73 80H), uma resposta de exceção é repassada a aplicação usuário como uma confirmação positiva. Se o código de função verificado é o diferente do usado na requisição ou o campo de dados contém inconsistências, uma mensagem de confirmação negativa é retornada a aplicação usuário. Figura 32 - Diagrama de atividades do processo de confirmação [19]. Uma confirmação positiva repassada a aplicação usuário, não implica que o servidor foi capaz de processar a requisição adequadamente, mas sim que uma requisição foi enviada a um servidor e uma resposta foi recebida. Servidor Modbus Um servidor Modbus é responsável por prover acesso a objetos e serviços de uma aplicação para um cliente Modbus remoto. Esta aplicação pode ser uma aplicação de um dispositivo como um CLP, uma IHM, um instrumento de medição de campo, um dispositivo simples de E/S e outros. A função do servidor Modbus é mapear os objetos 74 desta aplicação em objetos Modbus de leitura e escrita, para disponibilizar ou alterar seus atributos. O servidor Modbus deve, em tempo real, processar a requisição recebida pelo cliente Modbus e enviar uma resposta com os dados solicitados ou com uma mensagem de exceção. O servidor Modbus pode prover dois tipos de acessos aos objetos das aplicações: um acesso simples aos seus objetos ou um acesso avançado aos serviços. Alguns serviços podem ser processados pelo servidor Modbus sem a necessidade de interação com a aplicação usuário, por outro lado, alguns serviços necessitam desta interação para serem processados. Entre o servidor Modbus e a aplicação usuário, podem existir dois tipos de interação: síncrona e assíncrona. Um servidor Modbus pode aceitar mais de uma requisição simultaneamente. A quantidade máxima de requisições simultâneas que um servidor pode aceitar depende de sua implementação: projeto, capacidade de memória e processamento. O diagrama abaixo descreve como se dá o processo de tratamento de uma requisição recebida de um cliente Modbus, a verificação da PDU, o processamento do serviço e o preparo da resposta. 75 Figura 33 - Diagrama de tratamento de requisição [19]. A primeira função do servidor Modbus, como é demonstrado no diagrama anterior, é verificar o cabeçalho MBAP recebido no pacote enviado pelo cliente Modbus. O campo ‘Identificador de protocolo’ deve ser ter o valor 0x00, indicando o protocolo Modbus. Se o valor deste campo for diferente deste, a indicação é recusada. E se o valor confere, uma transação é instanciada. O número máximo de transações que podem ser instanciadas, dependem do parâmetro “NumberMaxOfTransaction”. Se o valor deste parâmetro for excedido, uma resposta de exceção é preparada com o campo ‘código de exceção’ com valor igual a seis (6): servidor ocupado. Após a validação do campo ‘Identificador de protocolo’, o servidor deve verificar: o ‘identificador da conexão TCP’, fornecido pelo gerenciador TCP; o campo ‘identificador da transação’; e o ‘identificador de unidade’. 76 Se estes campos forem validados, o servidor passa a verificar a PDU recebida. Sendo o campo ‘código de função’ o primeiro a ser verificado. Se o valor deste for inválido, uma resposta de exceção é preparada com o campo ‘código de exceção’ com valor igual a um (1): função inválida. E se o valor for validado, o servidor passa a processar a requisição. Após o processamento da requisição, o servidor deve preparar uma resposta à aplicação usuário. A resposta depende do resultado do processamento da requisição e pode ser uma resposta positiva ou uma resposta de exceção. Se nenhum erro foi detectado durante o processamento da requisição, o servidor retornará uma resposta positiva com as informações preenchidas no ‘campo de dados’ da PDU. No campo ‘código de função’ da PDU deve ser copiado o mesmo valor encontrado no campo ‘código de função’ da requisição recebida. Um cabeçalho MBAP deve ser anexado a PDU com os campos devidamente preenchidos. O valor do campo ‘identificador de unidade’ deve ser o mesmo do mesmo campo da requisição. O valor do campo ‘tamanho’ deve conter o valor calculado da PDU mais o valor do campo ‘identificador de unidade’ em bytes. O campo ‘Identificador de protocolo’ também deve ter o mesmo valor do mesmo campo da requisição, ou seja, 0x0000. E o valor do campo ‘identificador da transação’ deve ser associado à requisição recebida. 77 5 Snort aplicado a uma rede MODBUS/TCP 5.1 Introdução Neste capítulo, são apresentados os testes realizados para demonstrar as funcionalidades e os ganhos na utilização de um Sistema de Detecção de Intrusão em redes de automação industrial. A arquitetura do ambiente de rede utilizado nos testes foi composta por um dispositivo cliente, um dispositivo servidor de dados, se comunicando através do protocolo Modbus/TCP, e do Snort como IDS de rede. Em ambientes de automação industrial, os sistemas de controle e supervisão desempenham um papel de suma importância para a garantia da continuidade e da segurança operacional do processo industrial. Qualquer alteração ou novas implementações desenvolvidas nestes sistemas requerem um exaustivo processo de testes e validação. A implementação de um Sistema de Detecção de Intrusão em redes de automação também precisa ser submetida a este processo, uma vez que pode interferir diretamente nos sistemas de controle e supervisão da planta industrial. Levando estes requisitos em conta e também devido ao pouco tempo disponível para o desenvolvimento deste trabalho, optou-se por realizar os testes em um ambiente de simulação. 78 Figura 34 – Modelo de comunicação cliente x servidor Modbus. Em sistemas de controle e supervisão, o dispositivo cliente (mestre) pode ser um sistema SCADA, Supervisório ou SDCD, enquanto o dispositivo servidor (escravo), em boa parte das aplicações, é um CLP. O desenvolvimento dos testes descritos neste capítulo foi dividido em duas etapas. A primeira etapa consistiu na instalação e configuração dos programas Modbus cliente, Modbus servidor e do IDS Snort, com uma série de regras elaboradas especificamente para o Modbus TCP. A segunda etapa consistiu na execução dos testes em questão, ou seja, a geração de ataques e análise dos alertas e registros gerados pelo Snort. 5.2 Ambiente de simulação Como já mecionado, em uma rede Modbus/TCP, o dispositivo escravo é responsável por colher os dados do processo industrial, realizar as tarefas de controle lógico e disponibilizar informações de tempo real ao dispositivo mestre. A aquisição destes dados pelo dispositivo cliente (mestre) é feita através de requisições enviadas ao dispositivo servidor (escravo). O servidor, após receber e processar a requisição, envia 79 uma mensagem de resposta ao cliente, contendo os dados solicitados ou uma mensagem de exceção, caso um erro ocorra. Para o desenvolvimento dos testes, foram utilizados dois programas de simulação Modbus/TCP: • Modpoll – Um programa de simulação de dispositivo cliente (mestre), e o; • Mod_rssim - Um programa de simulação servidor (escravo). Figura 35 – Ambiente de simulação. O principal objetivo do Snort é, através de regras definidas especificamente para o protocolo Modbus/TCP, detectar a ocorrência de ataques a uma rede de automação industrial. Para isto ele fará a inspeção dos pacotes de dados, contendo as requisições e respostas trocadas entre o cliente Modbus e o servidor Modbus. 80 Como visto anteriormente, a necessidade de integração do ambiente corporativo ao ambiente de automação industrial, trouxe uma série de questões de segurança que antes eram particulares ao ambiente corporativo da empresa. Questões como a possibilidade de contaminação dos sistemas de controle e supervisão por vírus de computador, exploração de falhas de programação, tráfego de informações em texto pleno, ataques de negação de serviço, acesso não autorizado e outros tipos de vulnerabilidades e ameaças que passam a fazer parte do ambiente industrial. Vale lembrar outra importante questão: a maioria dos protocolos de automação industrial não foi projetada para atender aos requisitos de segurança das redes corporativas. Este também é o caso do Modbus, que originalmente foi projetado para comunicação “mestre x escravo” em redes seriais dedicadas e totalmente segregadas de outras redes da empresa. A utilização do Snort, com uma série de regras desenvolvidas especificamente para o protocolo Modbus/TCP, é uma importante ação para eliminar ou mitigar os efeitos que estas vulnerabilidades e ameaças podem causar ao processo industrial. Outro ganho, gerado pela flexibilidade de desenvolvimento de regras personalizadas, é o de suprir a carência de ferramentas de detecção de intrusão em redes de automação industrial, devido a grande variedade e particularidade dos protocolos existentes. As regras definidas no Snort são úteis na detecção de vários tipos de ataques, como por exemplo: 1 – Tentativa de estabelecimento de comunicação não autorizada por atacantes se fazendo passar por dispositivo mestre ou escravo; 2 – Requisições que podem ser associadas a ataques de reconhecimento (engenharia social) ou Negação de Serviço (DoS); 3 – Tráfego de pacotes Modbus/TCP mal formados que poderiam ser utilizados num ataque de “buffer overflow” ou Negação de Serviço (DoS). 5.2.1 Instalação e configuração do Snort O Snort tem uma série de características que permitem a definição e utilização de recursos que facilitam seu uso em ambientes grandes ou distribuídos, através dos arquivos de configuração. Os arquivos de configuração do Snort permitem que o 81 mecanismo inclua variáveis, arquivos de configuração adicionais e arquivos “include” vinculados adicionais. A seguir serão descritos os passos seguidos na configuração dos recursos do Snort. Definição das variáveis O Snort permite que sejam definidas variáveis personalizadas para uso dentro de um conjunto de regras. Estas variáveis devem ser incluídas no arquivo de configuração ‘/etc/snort/snort.conf’ e podem ser usadas no lugar de endereços IP e redes. A sintaxe do comando é: var <desired_variable_name> < variable_name > Na simulação foram adicionadas as variáveis “MODBUS_CLIENT” e “MODBUS_SERVER” no arquivo de configuração com os respectivos endereços IP das máquinas utilizadas como mestre (clientes) e escravo (servidoras). O conteúdo do arquivo ‘/etc/snort/snort.conf’ ficou o seguinte: var MODBUS_CLIENT 192.123.198.100 var MODBUS_SERVER 192.68.71.50 include /etc/snort/modbus_tcp.rules Geralmente a quantidade de estações escravas (CLP’s, RTU’s, Dispositivo de I/O) é grande, enquanto o número de estações mestre (Supervisórios, SDCD’s) é bem reduzido. Isto se explica pelo fato de que um sistema SCADA acessa vários dispositivos de campo. É importante que seja definida uma política de segurança da rede de automação que estabeleça um controle na adição e remoção de dispositivos com endereço IP na rede. Antes da instalação de um equipamento na rede, é necessário que seja incluído no arquivo de configuração o endereço IP, para evitar a ocorrência de falsos positivos na rede. Um endereço IP adicionado sem este cuidado, pode ser entendido pelo IDS como uma tentativa de acesso não autorizado à rede. Esta questão será abordada com mais detalhes no próximo item. 82 Inclusão do arquivo de regras Outra funcionalidade do Snort é que ele permite que sejam especificados arquivos do tipo “include” contendo conjuntos de regras que podem ser utilizados na implementação das regras. As variáveis e tipos de regras definidos dentro dos arquivos “include” substituirão os valores predefinidos para essas variáveis. Para a simulação, foi adicionada no arquivo de configuração a linha “include /etc/Snort/modbus_tcp.rules”, como pode ser observado no item anterior. Esta opção indicará o arquivo com as regras que foram definidas para o protocolo Modbus/TCP e que foram utilizadas neste trabalho. Definição das Regras O Snort permite a cada usuário criar suas próprias regras, aplicadas ao seu ambiente específico. Esta funcionalidade do sistema permite que sejam criadas regras específicas para protocolos de automação sobre Ethernet, como é o caso do Modbus/TCP. As regras para este protocolo foram descritas em um arquivo chamado ‘modbus_tcp.rules’. Para o desenvolvimento deste trabalho, foram utilizadas as seguintes regras desenvolvidas e disponibilizadas pela “Digital Bond Inc.” 6 . a) Modo de escuta forçado Esta regra gera um alerta para cada requisição enviada por máquinas clientes forçando o dispositivo servidor a ficar unicamente no modo de escuta. Isto isola este dispositivo dos demais da rede e todos os controles de comunicação ativos são desligados. Para o processo ser normalizado é necessário que seja enviada uma requisição de reinício da comunicação para o servidor em questão (código de função 8 e sub-função 1). alert tcp $MODBUS_CLIENT (flow:from_client,established; any -> content:"|08 $MODBUS_SERVER 00 04|"; 502 offset:7; depth:3; msg:"Modbus TCP - Force Listen Only Mode"; priority:1;) 6 http://www.digitalbond.com 83 Este ataque pode ser conduzido por qualquer atacante que tenha um IP válido na rede e que tenha um programa simulador de cliente Modbus, que pode ser obtido facilmente na Internet. Este ataque pode ser considerado um ataque de negação de serviço, pois o dispositivo servidor, que como vimos pode ser um CLP, não responderá mais a nenhuma requisição de outro dispositivo cliente da rede. Um ataque como este pode ser direcionado a todos os CLP’s de uma rede. Podem ocorrer falsos positivos, pois este comando pode ser usado pelos técnicos para testes ou análise de problemas, mas isto é raro. É necessário que seja identificada a origem dos comandos para se evitar futuros ataques. b) Opção de reinício de comunicação Esta regra identificará todas as requisições enviadas por um dispositivo cliente para reiniciar os dispositivos servidores. Este comando faz com que a porta remota do servidor seja reinicializada, ficando momentaneamente sem comunicação com os demais dispositivos. alert tcp $MODBUS_CLIENT any -> $MODBUS_SERVER (flow:from_client,established; content:"|08 depth:3; Restart msg:"Modbus TCP - 00 01|"; Communications 502 offset:7; Option"; priority:1;) Esta também é uma ação simples de ser implementada por qualquer pessoa que tenha acesso à rede alvo. E, pelo mesmo motivo descrito no item anterior, alguns falsos positivos podem ser gerados. Eventualmente este comando pode ser utilizado por técnicos da rede para análise e resolução de problemas. c) Limpeza dos contadores e registros de diagnóstico Esta regra identificará todas as requisições enviadas de um dispositivo cliente para qualquer dispositivo servidor com código de função 08 e código de sub-função 0A. Este comando tem o propósito de limpar todos contadores e registros de diagnóstico e poderia ser utilizado por um atacante na tentativa de limpar seus rastros no sistema ou dificultar a análise de um problema. 84 alert tcp $MODBUS_CLIENT (flow:from_client,established; depth:3; msg:"Modbus TCP - any -> content:"|08 Clear $MODBUS_SERVER 00 Counters 502 0A|"; offset:7; and Diagnostic Registers"; priority:3;) Falsos positivos também podem ser gerados, pois ocasionalmente pode existir a necessidade de que seja feita uma limpeza nos contadores e registros de diagnóstico do sistema. d) Leitura de dados do dispositivo O código de função 2B é utilizado por dispositivo cliente para obter informações do dispositivo servidor. Podem ser obtidas várias informações, como: fabricante, código do dispositivo, versão do software, modelo e outros mais que estejam disponíveis. Este é um recurso de engenharia social que pode ser utilizado por atacantes na obtenção de informações que serão úteis em um subseqüente ataque ao sistema ou até mesmo na obtenção de vantagens comerciais. alert tcp $MODBUS_CLIENT any -> $MODBUS_SERVER 502 (flow:from_client,established; content:"|2B|"; offset:7; depth:1; msg:"Modbus TCP - Read Device Identification"; priority:3;) Ao se detectar uma transação como esta, deve ser verificada e validada a origem da requisição. Pois, ocasionalmente estas informações podem ser requisitadas, gerando falsos positivos. e) Solicitação de informação do servidor Uma requisição feita com o código 0x11, permite que um dispositivo cliente receba a descrição do tipo, o corrente estado e outras informações específicas de um dispositivo servidor. alert tcp $MODBUS_CLIENT any -> $MODBUS_SERVER 502 (flow:from_client,established; content:"|11|"; offset:7; depth:1; msg:"Modbus TCP - Report Server Information"; priority:3;) Este, da mesma maneira que o anterior, é um ataque de engenharia social. Pode ser utilizado para a coleta de informações dos dispositivos e da rede para um subseqüente ataque ou obtenção de vantagens comerciais. 85 f) Requisição de leitura no CLP não autorizada O protocolo Modbus não possui um sistema de autenticação da origem de uma requisição. Em outras palavras, qualquer dispositivo de uma rede pode requisitar dados de um dispositivo servidor sem problemas. Esta também é uma grande arma nas mãos de uma pessoa mal intencionada, como um engenheiro social. Este alerta permite que seja identificada qualquer tentativa de comunicação de um dispositivo não autorizado, ou seja, com IP diferente do que está registrado na variável MODBUS_SERVER, tentar se comunicar com os dispositivos servidores da rede. alert tcp !$MODBUS_CLIENT (flow:from_client,established; any -> $MODBUS_SERVER content:"|00 00|"; 502 offset:2; depth:2; pcre:"/[\S\s]{3}(\x01|\x02|\x03|\x04|\x07|\x0B|\x0C|\x11|\x14|\x17 |\x18|\x2B)/iAR"; msg:"Modbus TCP - Unauthorized Read Request to a PLC"; priority:2;) Se algum novo dispositivo é adicionado à rede, falsos positivos serão gerados até que seja incluído o seu IP na variável do arquivo de configuração do Snort. g) Requisição de escrita não autorizada no servidor Este caso é bem semelhante ao anterior, com o agravante de que aqui se trata não apenas de leitura de dados, mas de escrita de dados no dispositivo servidor. Tendo acesso de escrita nos dispositivos de controle de uma planta industrial, o atacante poderia alterar a configuração de um CLP, tornando-o inoperável, ou mesmo ter ao seu alcance o controle de vários equipamentos de campo, como válvulas de controle, bombas, acionadores e muitos outros. E isto seria um grande risco à integridade do sistema e à segurança operacional de uma planta industrial, pois qualquer comando feito de maneira inadequada, poderia causar um acidente de proporções catastróficas. alert tcp !$MODBUS_CLIENT (flow:from_client,established; any -> $MODBUS_SERVER content:"|00 00|"; 502 offset:2; depth:2; pcre:"/[\S\s]{3}(\x05|\x06|\x0F|\x10|\x15|\x16)/iAR"; msg:"Modbus TCP priority:1;) - Unauthorized Write Request to a PLC"; 86 Este também é um ataque simples, pois da mesma forma que os anteriores, qualquer pessoa com acesso à rede e com um simulador disponível na Internet, poderia implementá-lo. Como no item anterior, se algum novo dispositivo é adicionado à rede, falsos positivos serão gerados até que seja incluído o seu IP na variável do arquivo de configuração do Snort. h) Tamanho de pacote ilegal, possível ataque de negação de serviço O tamanho de uma PDU no protocolo Modbus é limitado pelo tamanho da “constraint” herdada da primeira implementação Modbus na rede serial. O tamanho máximo de uma Unidade de Dados de Aplicação (UDA) para RS485 é 256 bytes. No Modbus/TCP é adicionado um Cabeçalho (MBPA) a PDU da aplicação Modbus, como visto no capítulo anterior, e este pacote é encapsulado em um pacote TCP. Porém, não existe uma proteção do protocolo contra o envio de pacotes que excedam este tamanho. Um atacante, com intenção de implementar um ataque de “buffer overflow” ou Negação de Serviço (DoS), pode criar pacotes maiores que 256 bytes e enviá-los, podendo causar mal funcionamento nos dispositivos servidores. alert tcp $MODBUS_CLIENT any <> $MODBUS_SERVER 502 (flow:established; dsize:>300; msg:"Modbus TCP - Illegal Packet Size, Possible DOS Attack"; priority:1;) Para este caso, não existem falsos positivos conhecidos e sua implementação não é tão simples. A criação e envio de um pacote com tamanho maior do que esperado é simples, porém implementar um pacote que gere um ataque de “buffer overflow” não é tão simples e bem específico da aplicação. i) Dispositivo escravo ocupado Um servidor pode estar processando um comando ou programa que consuma muito recurso e que tenha conseqüentemente uma longa duração. Neste caso, quando um cliente envia uma requisição estando o servidor ocupado, é enviada uma resposta pelo servidor com código de exceção informando que ele está ocupado. O cliente deve então enviar a requisição mais tarde, quando o servidor estiver desocupado. 87 Um atacante, com acesso físico ou lógico a um dispositivo servidor, pode interceptar uma requisição de um cliente e responder com este código de exceção. Isto permite que o atacante ganhe mais tempo numa modificação no programa de um CLP ou outro dispositivo de campo. alert tcp $MODBUS_SERVER 502 -> $MODBUS_CLIENT any (flow:established; content:"|06|"; offset:8; depth:1; byte_test: 1, >, 0x80, 7; msg:"Modbus TCP - Slave Device Busy Exception Code Delay"; threshold: type threshold, track by_src, count 3, seconds 60; priority:2;) Este alerta pode ajudar na identificação deste ataque, porém falsos positivos podem ser comuns, pois um CLP ou outro dispositivo Modbus servidor, podem realmente estar num processamento de longa duração. j) Reconhecimento de exceção de código de atraso O servidor, ao receber uma requisição de um cliente, que tomará um tempo de processamento maior do que determinado, ou esperado, deverá enviar uma resposta com código de exceção de atraso de valor igual a 05 para prevenir um erro de tempo expirado, ou “time out”, no cliente. Um atacante pode interceptar uma requisição de um cliente a um servidor e retornar ao cliente uma mensagem com código de exceção de atraso. Esta é outra maneira do atacante ganhar tempo para uma intervenção maldosa num dispositivo de campo. alert tcp $MODBUS_SERVER 502 -> $MODBUS_CLIENT any (flow:established; content:"|05|"; offset:8; depth:1; byte_test: 1, >, 0x80, 7; msg:"Modbus TCP - Acknowledge Exception Code Delay"; threshold: type threshold, track by_src, count 3, seconds 60; priority:2;) k) Tamanho de pacote incorreto, possível ataque de negação de serviço Os quinto e sexto bytes de um cabeçalho MBAP informam o tamanho do pacote Modbus/TCP. Um atacante pode inserir ou remover código malicioso em um pacote Modbus/TCP e esquecer de alterar ou alterar incorretamente estes dois campos do cabeçalho. Este alerta permite então identificar este possível ataque. 88 alert tcp $MODBUS_SERVER 502 <> $MODBUS_CLIENT any (flow:established; byte_jump:2,4; isdataat:0,relative; msg:"Modbus TCP - Incorrect Packet Length, Possible DOS Attack"; priority:2;) A implementação deste ataque não é tão simples pela necessidade de interceptação dos pacotes e remontagem em tempo real. Analisando estes alertas, pode-se notar facilmente, que os maiores perigos para uma rede industrial, estão localizados internamente à rede, ao contrário do que se imagina atualmente. A maioria destes ataques são simples de serem implementados, pois é possível encontrar vários programas de simulação de um cliente Modbus na Internet. Uma pessoa que tenha acesso físico ou lógico à rede, de posse de um programa como este, poderia facilmente executar a maioria dos ataques descritos acima. Um “firewall” nestes casos, pouco poderia fazer para evitá-los. Outra importante questão que se deve levar em conta, quando se trata de um ambiente de automação industrial, são os falsos positivos gerados na maioria dos casos. Alguns comandos realmente podem ser utilizados por aplicações ou por técnicos em algumas ocasiões. Por isso é importante que se tenha um profundo conhecimento da rede e do conteúdo de seu tráfego, para que, ao se receber uma mensagem de alerta do Snort, tenha-se condições de se verificar a mensagem e identificar rapidamente que se trata de um falso positivo ou não. É importante também, que os vários procedimentos que interferem no funcionamento dos dispositivos e da própria rede de automação, estejam bem explicitados e definidos numa política de segurança específica para o ambiente de automação industrial. Estes procedimentos, estando bem definidos, irão inibir a maioria dos falsos positivos e dar maior credibilidade aos alertas gerados pelo Snort. Um exemplo claro seria um item definindo que para a adição de qualquer novo dispositivo à rede, seja necessário que o gerente da rede inclua o endereço IP do dispositivo na variável do arquivo de configuração do Snort antes que o mesmo fosse posto em operação. Isso evitaria a geração de alertas de leitura e escrita de dispositivo não autorizado aos dispositivos servidores. 89 5.2.2 Instalação e configuração dos simuladores Instalação e configuração do simulador servidor Para a simulação do dispositivo servidor foi utilizado o software mod_rssim desenvolvido e disponibilizado por Conrad Braam. Este simulador suporta os protocolos Modbus RTU (ou Modbus serial), Modbus TCP e também Allen-Bradley serial DF1. Este software simula o funcionamento de um CLP, disponibilizando registros de saída e de entrada a um dispositivo cliente. Estes registros são classificados em: entradas discretas, bobinas, registros de saída e registros de entrada. Figura 36 – Simulador Cliente Modbus. 90 Instalação e configuração do simulador cliente Para a simulação do dispositivo cliente, foi utilizado o programa “modpoll” (versão para Windows). Para executar o programa, é necessário passar algumas informações inseridas no próprio “prompt” do “cmd”, como o tipo de transação (TCP ou serial) e o número IP do dispositivo remoto. O comando para execução do programa é: # modpoll –m tcp <número do ip> No comando acima, ‘-m tcp’ indica uma transação com o protocolo Modbus/TCP. Algumas outras opções podem ser passadas na linha de comando, como o número de valores a serem coletados, o endereço do dispositivo escravo, a porta de comunicação (o padrão é a 502) e outros mais. # modpoll –m tcp –a 2 –c 100 –p 1024 <número do ip> Figura 37 – “Pooling” de dados. 91 5.3 Teste do ambiente Como descrito anteriormente, o Modbus é um protocolo que provê a comunicação entre um dispositivo cliente e um dispositivo servidor, baseado na troca de mensagens entre eles. O primeiro passo na execução dos testes é iniciar o serviço de captura de dados pelo Snort. Isto permitirá que seja possível analisar o estabelecimento da comunicação entre os dispositivos cliente e servidor, através do modo de registro de pacotes do Snort. O Snort é inicializado com o seguinte comando: # Snort -d -l -h 192.123.198.100 -c Snort.conf O Segundo passo na execução dos testes é o estabelecimento da comunicação entre os dois dispositivos, que neste trabalho são os programas Mod_rssim e Modpoll, servidor e cliente respectivamente. O programa Mod_rssim é simplesmente iniciado pela execução do arquivo mod_rssim.exe, disponibilizado para este trabalho. Após da inicialização do servidor é inicializado o cliente, pela execução do comando abaixo: # modpoll –m tcp 192.123.198.100 A execução deste comando faz com que uma série de requisições sejam enviadas ao dispositivo servidor de um em um segundo. Este procedimento também é referido como “pooling” de dados. O tipo de dados padrão requisitados neste caso são registros de saída de 16-bits, porém, outros tipos de dados poderiam ser requisitados. Como vimos no Capítulo 3, o Snort tem recursos que o permite funcionar como um “farejador” de pacotes, registrador de pacotes e detector de intrusão. Os recursos de registro de pacotes podem ser utilizados para: análise, diagnóstico e solução de problemas de rede; análise e comparativo de desempenho; e para fins não tão nobres, como a intromissão para obtenção de senhas e outros dados importantes. A seguir, temos um exemplo de registro dos pacotes trocados entre os programas cliente e servidor. Pode-se observar como se dá o estabelecimento de uma conexão TCP, a troca de dados entre cliente e servidor Modbus e o encerramento da conexão TCP. Este procedimento é demonstrado na figura 29 do Capítulo 4. 92 1 - Estabelecimento da conexão TCP/IP: 1.1 - O cliente, com IP 192.123.198.50, solicita uma conexão ao servidor, com o IP de destino 192.123.198.100 na porta 502, através do gerenciador TCP. Um pacote SYN é enviado para estabelecer a conexão. 12/02-14:25:17.405819 0:D0:C9:93:2F:38 -> 0:4:38:5B:22:7 type:0x800 len:0x4A 192.123.198.50:33148 -> 10.23.198.100:9191 TCP TTL:64 TOS:0x0 ID:30003 IpLen:20 DgmLen:60 DF ******S* Seq: 0x12D90815 Ack: 0x0 Win: 0x16D0 TcpLen: 40 TCP Options (5) => MSS: 1460 SackOK TS: 4357414 0 NOP WS: 2 Observe o valor do campo SYN J = 316213269 (0x12D90815). 1.2 - O servidor recebe o pedido de conexão e envia um pacote ACK ao cliente, para confirmar o pacote SYN. É somado 1 (um) ao valor do campo SYN. SYN K = 4102610487 , ACK (J + 1) = 316213270 12/02-14:25:17.406247 0:4:38:5B:22:7 -> 0:D0:C9:93:2F:38 type:0x800 len:0x4E 10.23.198.100:9191 -> 192.123.198.50:33148 TCP TTL:127 TOS:0x0 ID:31244 IpLen:20 DgmLen:64 DF ***A**S* Seq: 0xF488DE37 Ack: 0x12D90816 Win: 0xFC00 TcpLen: 44 TCP Options (9) => MSS: 1460 NOP WS: 0 NOP NOP TS: 0 0 NOP NOP TCP Options => SackOK 1.3 - Envio da confirmação de estabelecimento da conexão. 12/02-14:25:17.406268 0:D0:C9:93:2F:38 -> 0:4:38:5B:22:7 type:0x800 len:0x42 192.123.198.50:33148 -> 10.23.198.100:9191 TCP TTL:64 TOS:0x0 ID:30005 IpLen:20 DgmLen:52 DF ***A**** Seq: 0x12D90816 Ack: 0xF488DE38 TCP Options (3) => NOP NOP TS: 4357414 0 Win: 0x5B4 TcpLen: 32 93 Observe o valor do campo ACK (K + 1) = 4102610487 (0xF488DE38) 2 - Envio da requisição Modbus para o servidor: 12/02-14:25:17.406685 0:D0:C9:93:2F:38 -> 0:4:38:5B:22:7 type:0x800 len:0x4E 192.123.198.50:33148 -> 10.23.198.100:9191 TCP TTL:64 TOS:0x0 ID:30007 IpLen:20 DgmLen:64 DF ***AP*** Seq: 0x12D90816 Ack: 0xF488DE38 Win: 0x5B4 TcpLen: 32 TCP Options (3) => NOP NOP TS: 4357415 0 00 00 00 00 00 06 01 03 00 63 00 05 Campo Tamanho (bytes) Valor .........c.. Observação Cabeçalho MBAP Identificador da transação 02 00 00 Identificador do protocolo 02 00 00 Tamanho 02 00 06 Identificador de unidade 01 01 Quantidade de bytes de campos seguintes a este campo. PDU Código função de 01 03 Leitura de registros “Holding” Sub-código função de 02 00 63 Endereço inicial de leitura Quantidade registros requisitados de 02 00 05 Tabela 06 – Descrição dos dados Modbus/TCP. 94 3 - Envio da resposta Modbus para o cliente: 12/02-14:25:17.408663 0:4:38:5B:22:7 -> 0:D0:C9:93:2F:38 type:0x800 len:0x55 10.23.198.100:9191 -> 192.123.198.50:33148 TCP TTL:127 TOS:0x0 ID:31245 IpLen:20 DgmLen:71 DF ***AP*** Seq: 0xF488DE38 Ack: 0x12D90822 Win: 0xFBF4 TcpLen: 32 TCP Options (3) => NOP NOP TS: 1992111 4357415 00 00 00 00 00 0D 01 03 0A 00 00 00 00 00 00 00 ................ 00 00 00 Descrição dos dados Modbus/TCP da requisição enviada. O cabeçalho não é exibido pois apenas o campo ‘tamanho’ é modificado: Campo Tamanho (bytes) Valor Observação PDU Código função de 01 03 Leitura de registros “Holding” Número de bytes 01 0A Endereço inicial de leitura Valor do registro N* x 2 bytes N* = quantidade de registros. Tabela 07 – Descrição dos dados Modbus/TCP. 4 - Encerramento de uma conexão TCP: 4.1 - Solicitação de encerramento pelo cliente, feita pelo gerenciador TCP (FIN = 0xF6ACCD40). 12/02-15:25:31.446936 0:D0:C9:93:2F:38 -> 0:4:38:5B:22:7 type:0x800 len:0x42 192.123.198.50:33295 -> 10.23.198.100:9191 TCP TTL:64 TOS:0x0 ID:16826 IpLen:20 DgmLen:52 DF ***A***F Seq: 0xF6ACCD40 Ack: 0xF8ECD843 Win: 0x597 TCP Options (3) => NOP NOP TS: 7972004 2028240 TcpLen: 32 95 4.2 - Confirmação do encerramento da conexão (ACK of FIN = 0xF6ACCD40). 12/02-15:25:31.447358 0:4:38:5B:22:7 -> 0:D0:C9:93:2F:38 type:0x800 len:0x42 10.23.198.100:9191 -> 192.123.198.50:33295 TCP TTL:127 TOS:0x0 ID:1207 IpLen:20 DgmLen:52 DF ***A**** Seq: 0xF8ECD843 Ack: 0xF6ACCD41 Win: 0xFBB8 TcpLen: 32 TCP Options (3) => NOP NOP TS: 2028249 7972004 Na simulação, o Snort foi configurado de maneira que os alertas fossem enviados para o arquivo ‘/var/log/snort/alert’ na máquina local. Estes alertas também poderiam ser enviados, através de “sockets” ou de interrupções, para arquivos de “log” em um servidor central de “logs”, ou mesmo armazenados em um banco de dados. Existem também vários “plug-ins” que permitem a exibição dos alertas em uma interface gráfica ou em uma interface “web”. Alguns programas permitem uma integração do sistema de detecção de intrusão do Snort com uma reconfiguração do firewall para, por exemplo, barrar um endereço de origem. Porém, como tratado no Capítulo 3, esta opção não é muito aceita na comunidade de automação. A seguir são demonstradas três simulações de ataques ao ambiente e os respectivos alertas gerados pelo Snort. Os alertas gerados foram armazenados no arquivo ‘/var/log/snort/alert’. Para a realização dos ataques foi adicionada uma terceira máquina ao ambiente de simulação (figura 38) com endereço IP 192.123.198.150 e também com o software Modpoll instalado. 96 Figura 38 – Simulação de ataque. 1 – Requisição de leitura no servidor não autorizada: Através do programa Modpoll foram, enviadas as requisições de leitura de dados para o servidor Modbus. Como este endereço não estava previamente cadastrado na variável ‘MODBUS_CLIENT’, definida no arquivo ‘snort.conf’, o Snort, utilizando a regra ‘Requisição de leitura no CLP não autorizada’, identificou uma tentativa de leitura de dados do servidor não autorizada. Esta poderia ser uma tentativa de obtenção de informações sobre os sistemas de controle e outros dispositivos da planta industrial, para um futuro ataque a estes sistemas. O registro de alerta gerado, como pode ser observado a seguir, possui as informações necessárias para a identificação do tipo do ataque e sua origem. 97 [**] [1:0:0] Modbus TCP - Unauthorized Read Request to a PLC [**] [Priority: 0] 12/06-14:44:22.932906 0:D0:C9:77:2F:43 -> 0:4:38:5B:22:7 type:0x800 len:0x4E 192.123.198.150:33044 -> 10.23.198.100:502 TCP TTL:64 TOS:0x0 ID:3377 IpLen:20 DgmLen:64 DF ***AP*** Seq: 0xCE99BD08 Ack: 0x7B39199F Win: 0x5AA TcpLen: 32 TCP Options (3) => NOP NOP TS: 4306908 1149471 2 – Alteração do modo de funcionamento do servidor para modo de escuta: No segundo exemplo, a mesma máquina do exemplo anterior, enviou uma requisição de alteração do modo de funcionamento do dispositivo servidor para o modo de escuta apenas. Esta requisição foi comparada com a regra ‘Modo de escuta forçado’ e identificada como um ataque. [**] [1:0:0] Modbus TCP – Force Listen Only Mode [**] [Priority: 1] 12/06-14:47:22.692576 0:D0:C9:77:2F:43 -> 0:4:38:5B:22:7 type:0x800 len:0x4E 192.123.198.150:33045 -> 10.23.198.100:502 TCP TTL:64 TOS:0x0 ID:57389 IpLen:20 DgmLen:64 DF ***AP*** Seq: 0xD924E147 Ack: 0x5DAED502 Win: 0x571 TcpLen: 32 TCP Options (3) => NOP NOP TS: 4486695 1151268 Como descrito anteriormente, este ataque pode ser conduzido por qualquer atacante que tenha um IP válido na rede e que tenha um programa simulador de cliente Modbus a todos os CLP’s desta rede. Pode-se considerar este ataque como um ataque de negação de serviço. O CLP não responderá mais a nenhuma requisição de outro dispositivo cliente da rede. 98 3 – Requisição de escrita não autorizada no servidor: Para este ataque, foi necessário instalar na máquina de origem dos ataques uma versão de demonstração do software SCADA iFIX7 . Esta versão do software possui a limitação de funcionar apenas durante o período de duas horas. Neste software foi desenvolvida uma aplicação com um campo de entrada de dados (figura 39) que permite escrever um valor decimal e solicitar sua escrita na área de memória do dispositivo servidor. Figura 39 – Escrita de dados no servidor. Como vimos no Capítulo 2, as aplicações SCADA, bem como os SDCD’s e Supervisórios, são capazes de enviar requisições de escrita aos dispositivos de controle como forma de intervir no controle do processo industrial, como alterar o set-point de um controlador, o valor de abertura de uma válvula de controle ou o status de funcionamento de um motor elétrico, ligado ou desligado. Este ataque é detectado pelo IDS devido ao IP de origem da requisição não estar cadastrado na variável MODBUS_CLIENT e possuir um conteúdo que indica o código de função para requisição de escrita no servidor. 7 - http://www.gefanuc.com/en/ProductServices/AutomationSoftware/Hmi_Scada/iFIX/index.html 99 Registro de alerta gerado pelo Snort: [**] [1:0:0] Modbus TCP – Unauthorized Write Request to a PLC [**] [Priority: 1] 10/07-11:33:16.542689 0:D0:C9:77:2F:43 -> 0:4:38:5B:22:7 type:0x800 len:0x4E 192.123.198.150:33045 -> 10.23.198.100:502 TCP TTL:64 TOS:0x0 ID:33485 IpLen:20 DgmLen:64 DF ***AP*** Seq: 0xE934A127 Ack: 0x5FEDD301 Win: 0x571 TcpLen: 32 TCP Options (3) => NOP NOP TS: 6686773 3254376 5.4 Análise dos testes Os testes realizados com o Snort em uma rede utilizando o Modbus/TCP permitiram verificar a geração dos registros e “logs” de alerta, com informações úteis na detecção dos ataques e no reconhecimento das vulnerabilidades existentes nos sistemas de automação. As três tentativas de ataques identificadas: requisição de leitura no CLP não autorizada, tentativa de alteração do modo de funcionamento do dispositivo servidor e requisição de escrita não autorizada no servidor, são apenas exemplos de uma série de ações maliciosas que podem ser detectadas utilizando IDS’s em redes de automação industrial. Devido às limitações do software Modpoll, que possui apenas a funcionalidade requisitar leitura de dados do dispositovo servidor, não foi possível a simulação de outros ataques para verificação das demais regras demonstradas neste capítulo. Outras regras específicas para o Modbus/TCP, ou para o protocolo industrial em questão, deverão ser desenvolvidas durante o ciclo de vida de um sistema de controle industrial. Isto à medida que novos serviços ou funcionalidades sejam acrescidos à rede. Um IDS deve prover esta funcionalidade de adaptação ao sistema de controle. Este trabalho foi desenvolvido utilizando o Snort como IDS , porém, outros sistemas de detecção podem ser utilizados, desde que tenham a funcionalidade de adaptar suas regras, para os protocolos específicos de automação industrial. 100 6 Conclusão Este trabalho permitiu demonstrar os ganhos com a implantação de um IDS num segmento nível 2 de uma rede de automação industrial, com regras específicas para protocolos desta rede, como é o caso do Modbus/TCP, sendo uma importante ação para aumentar a segurança dos processos industriais. Através dos testes realizados, foi possível verificar a geração dos registros e “logs” de alerta, informações úteis na detecção dos ataques e no reconhecimento das vulnerabilidades existentes nos sistemas de automação. Isto permitiu, por exemplo, a identificação de acessos não autorizados ao PLC, a tentativa de forçar a atualização das entradas e saídas para o modo de escuta apenas e a tentativa de escrita não autorizada no CLP. Ataques que seriam críticos à segurança dos processos industriais. Devido ao curto período de tempo para desenvolvimento deste trabalho não foi possível a geração de mais ataques. Como abordado no Capítulo 5, o software Modpoll tem a limitação de apenas enviar requisições de leitura ao servidor. Novos testes poderão ser realizados através de aplicativos clientes desenvolvidos com a funcionalidade de permitir gerar pacotes de dados com conteúdos que sejam identificados como ataques. Observou-se durante os testes o funcionamento do protocolo Modbus: como se dá o estabelecimento de uma conexão TCP, a troca de dados entre cliente e servidor Modbus e o encerramento da conexão TCP. Esta funcionalidade da ferramenta IDS pode ser utilizada pelos administradores da rede industrial em auditorias, para análises de problemas e no estudo dos protocolos trafegados. Esta é uma recente área de estudo que pode ser bastante explorada, uma vez que as empresas de segurança da informação do mercado ainda não têm o domínio necessário sobre os protocolos de rede de automação industrial. Do mesmo modo que foram desenvolvidas regras específicas para o Modbus/TCP, podem ser desenvolvidas regras para todos os protocolos de redes industriais Ethernet, bem como para os protocolos industriais de redes não IP. Outra possibilidade de trabalho futuro seria o desenvolvimento de um sistema centralizado de gerenciamento das informações disponibilizadas nos IDS’s dos vários 101 segmentos de rede. Isto permitiria uma redução nos recursos de gerenciamento da rede, devido a grande variedade de protocolos industriais e de aplicações nas indústrias. Trabalhos futuros podem abordar o desenvolvimento de módulos que forneçam informações da origem do ataque, de como ele foi detectado e das possíveis ações a serem tomadas, para auxiliar o operador no processo de tomada de decisão a partir de uma informação fornecida por um IDS. 102 Referências Bibliográficas [1] ANDREW S. TANENBAUN. Redes de Computadores. Rio de Janeiro: Editora Campus, 2003. [2] SEGURANÇA Máxima: o guia de um hacker para proteger seu site na internet e sua rede. Rio de Janeiro: Editora Campus, 2000. [3] CARTILHA de Segurança para Internet – Parte I: Conceitos de Segurança. NIC BR Security Office. Disponível em: <http://www.nbso.nic.br/docs/cartilha/>. Acesso em: 20 out. 2004. [4] CARTILHA de Segurança para Internet – Parte VII: Incidentes de Segurança e Uso abusivo da Rede. NIC BR Security Office. Disponível em: <http://www.nbso.nic.br/docs/cartilha/>. Acesso em: 20 out. 2004. [5] CHRIS GREEN, MARTIN ROESCH. Snort user manual 2.3.3. Disponível em: <www.snort.org/docs/snort_manual/> , 2005. Acesso em: 15 set. 2005. [6] CONSTANTINO SEIXAS FILHO. A automação nos anos 2000: uma análise das novas fronteiras da automação. Disponível em: <http://www.las.pucpr.br/mcfmello/ias2/ArtigosLivros/AutomacaoAnos2000ConstantinoUFMG.pdf >. Acesso em: 11 mar. 2004. [7] CONSTANTINO SEIXAS FILHO. Tutorial ISA S-99 – Segurança da Informação. Revista InTech, São Paulo, n. 71, p. 14-18, 2005. [8] EGÍDIO ALBERTO BEGA et al. Instrumentação Industrial. Rio de Janeiro: Editora Interciência, 2003. [9] ENTERPRISE-Control System Integration Part I: Models and Terminology. Technical Report, ISA-TR99.00.01-2004. [10] FRANK NED. Ferramentas de IDS. Disponível <www.rnp.br/newsgen/9909/ids.html>. Acesso em: 12 nov. 2005. [11] GARY SEVOUNTS. Preocupações crescentes quanto à segurança de rede. Disponível em: <www.symantec.com/region/br/enterprisesecurity/content/government/>. Acesso em: 23 dez. 2004. [12] J. KIM. An artificial immune system for network intrusion detection. Disponível em: <http://www.cs.ucl.ac.uk/staff/J.Kim/GECCO_WS99.html>. Acesso em: 12 nov. 2005. [13] JAY BEALE; JAMES C. FOSTER; JEFFREY POSLUNS. Snort 2.0 Sistema de Detecção de Intrusão. Rio de Janeiro: Editora Campus, 2003. em: 103 [14] LAURIE ZIRKLE; VIRGINIA TECH. What is host-based intrusion detection? Disponível em: <http://www.sans.org/resources/idfaq/host_based.php>>. Acesso em: 12 nov. 2005. [15] M. CRAYMER; J. CANNADY; J. HARREL. New Methods of Intrusion Detection using Control-Loop Measurement. In: Fourth Technology for Information Security Conference. Maio, 1996. [16] M. PRABHACKER. Intrusion Detection. Disponível em: <http://www.cs,wright.edu/~pmateti/Courses/499/IntrusionDetection/>. Acesso em: 12 nov. 2005. [17] MARCOS DE OLIVEIRA FONSECA. Comunicação OPC – Uma abordagem prática. In: VI Seminário de Automação de Processos, Associação Brasileira de Metalurgia e Materiais, 2002, Vitória. [18] MODBUS application protocol specification <www.modbus.ogr>. Acesso em: 17 out. 2005. [19] MODBUS Messaging on TCP/IP implementation guide V1.0a. Disponível em: <www.modbus.ogr>. Acesso em: 17 out. 2005. [20] MODBUS over serial line specification and implementation guide V1.0. Disponível em: <www.modbus.ogr>. Acesso em: 17 out. 2005. [21] OSKAR ANDREASSON. Iptables Tutorial 1.2.0. Disponível em: <http://iptablestutorial.frozentux.net/iptables-tutorial.html>. Acesso em: 03 jul. 2005. [22] PAUL ZONNEVELD. DOE tackles security for petroleum industry SCADA networks. Upstream CIO, Setembro, 2004. [23] PAULO SÉRGIO MOTTA PIRES; LUIZ AFFONSO GUEDES DE OLIVEIRA; DIOGO NASCIMENTO BARROS. Aspectos de segurança em sistemas SCADA uma visão geral. 4°. Congresso Internacional de Automação, Sistemas e Instrumentação. São Paulo, 2004. [24] Profibus – Technology and Application. Disponível em: <http://www.profibus.com/pall/meta/downloads/article/00454/>. Acesso em: 10 jan. 2006. [25] RICKY M. MAGALHAES. “Host-Based vs Network-Based IDS”. Disponível em: <http://www.windowsecurity.com/articles>. Acesso em: 02 dez. 2005. [26] ROGÉRIO DE SOUZA DA MATA. Uma visão atual sobre sistemas heterogêneos na Automação Industrial. Revista Mecatrônica Atual, São Paulo, ano 04, num. 21, p. 14, 2005. [27] ROMILLY BOWDEN. Hart Technical Overview. Disponível em: <http://www.romilly.co.uk/booklet.htm>. Acesso em: 11 jan. 2006. V1.1a. Disponível em: 104 [28] SÉRGIO FREITAS. Apostila do Curso de Segurança em Redes. Disponível em: <http://sergio.inf.ufes.br/cursos/Seguranca/2005>. Acesso em: 12 nov. 2005. [29] STEPHEN NORTHCUTT. What is network based intrusion detection? Disponível em: <http://www.sans.org/resources/idfaq/network_based.php>. Acesso em:12 nov. 2005. [30] THOMAS H. PTACEK; TIMOTHY N. NEWSHAM. Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection. <http://www.snort.org/docs/idspaper/>. Acesso em: 17 nov. 2005. [31] W. LEE; S. SOLFO. “Data Mining Approaches for Intrusion Detection”. In: Proceeding of the 7th USENIX Security Symposium. 1998. [32] FIELDBUS Tutorial. Disponível em: <http://www.smar.com/brasil/fieldbus.asp>. Acesso em: 20 mar. 2006.