{"id":5154,"date":"2023-05-02T16:35:20","date_gmt":"2023-05-02T19:35:20","guid":{"rendered":"https:\/\/base4sec.com\/nao-categorizado\/atacando-redes-industriales-siemens\/"},"modified":"2025-02-26T08:25:56","modified_gmt":"2025-02-26T11:25:56","slug":"atacando-redes-industriales-siemens","status":"publish","type":"post","link":"https:\/\/base4sec.com\/pt-br\/technical-pt-br\/atacando-redes-industriales-siemens\/2023\/05\/02\/","title":{"rendered":"Ataque a redes industriais (Siemens)"},"content":{"rendered":"<div class=\"col-lg-7 nota-right d-flex flex-column\">\n<p class=\"cuerpo-nota\">H\u00e1 uma semana, na primeira parte desta postagem, pudemos ter uma vis\u00e3o geral dos PLCs (linguagem e hardware) e algumas vulnerabilidades, bem como uma vis\u00e3o geral das redes industriais associadas, dispositivos de campo, HMIs e DTUs. Agora que j\u00e1 assimilamos esses conceitos sobre redes industriais e seus elementos associados, vamos entrar em detalhes sobre como elas se comunicam.<\/p>\n<p>Esta postagem apresenta uma an\u00e1lise do ambiente do PLC da Siemens, em particular o protocolo de comunica\u00e7\u00e3o conhecido como\u00a0<b>S7CommPlus<\/b>. Esse protocolo permite a comunica\u00e7\u00e3o entre os pontos de extremidade da Siemens, como o TIA Portal (o software de engenharia do fabricante), e os PLCs, como o S7 -1211C, que foi usado para os experimentos realizados por Hui, H., McLaughlin, K. e Sezer, S. A an\u00e1lise usa as ferramentas\u00a0<b>WinDbg<\/b>\u00a0e\u00a0<b>Scapy<\/b>. O mecanismo anti-replay usado no protocolo \u00e9 investigado, incluindo a identifica\u00e7\u00e3o dos bytes espec\u00edficos necess\u00e1rios para criar pacotes de rede v\u00e1lidos. A partir da an\u00e1lise experimental, novas explora\u00e7\u00f5es s\u00e3o identificadas, incluindo a manipula\u00e7\u00e3o de chaves criptogr\u00e1ficas.<\/p>\n<p>Em seguida, s\u00e3o demonstradas as explora\u00e7\u00f5es que permitem a personifica\u00e7\u00e3o de uma sess\u00e3o de comunica\u00e7\u00e3o existente, a nega\u00e7\u00e3o da capacidade de um engenheiro de configurar um PLC, a realiza\u00e7\u00e3o de altera\u00e7\u00f5es n\u00e3o autorizadas nos estados do PLC e outras poss\u00edveis viola\u00e7\u00f5es de integridade e disponibilidade. V\u00e1rias recomenda\u00e7\u00f5es de atenua\u00e7\u00e3o tamb\u00e9m ser\u00e3o propostas, levando em conta os conceitos vistos acima.<\/p>\n<p><span class=\"subtitulo-nota\">Introdu\u00e7\u00e3o<\/span><\/p>\n<p>A Siemens \u00e9 um dos principais fornecedores do mundo e, para esta an\u00e1lise, o controlador S7-1211C foi investigado. Como lembramos, o ataque\u00a0<b>Stuxnet<\/b>\u00a0demonstrou como os PLCs comprometidos poderiam causar um impacto f\u00edsico. O worm se espalhou primeiro a partir de uma unidade remov\u00edvel dentro de uma usina de enriquecimento de ur\u00e2nio no Ir\u00e3 e infectou uma m\u00e1quina na rede &#8220;<b>com air-gap<\/b>&#8220;Em seguida, o worm se espalhou pela rede usando quatro vulnerabilidades zero day e assinaturas digitais de duas empresas leg\u00edtimas. Al\u00e9m dos sofisticados mecanismos de infec\u00e7\u00e3o e propaga\u00e7\u00e3o usados pelo Stuxnet, um aspecto importante do ponto de vista do ICS foi o fato de ele ter como alvo apenas alguns modelos espec\u00edficos de PLC, ou seja, os Siemens S7 315 e 417, que eram usados para controlar as centr\u00edfugas no processo de enriquecimento. O Stuxnet determinava se o alvo era um PLC da Siemens verificando o n\u00famero do modelo, os detalhes da configura\u00e7\u00e3o e baixando o c\u00f3digo do programa do dispositivo. Se a verifica\u00e7\u00e3o falhasse, o Stuxnet n\u00e3o realizava nenhum outro ataque, possivelmente para evitar a detec\u00e7\u00e3o de suas a\u00e7\u00f5es. Caso contr\u00e1rio, ele atualizava o bloco de ciclo principal do PLC com c\u00f3digo malicioso para aumentar a frequ\u00eancia de rota\u00e7\u00e3o das centr\u00edfugas conectadas a n\u00edveis prejudiciais, enquanto enganava o operador injetando dados falsos na HMI. O ataque mudou a forma como o setor encarava a seguran\u00e7a.<\/p>\n<p><span class=\"subtitulo-nota\">Pesquisas relacionadas<\/span><\/p>\n<p>A programa\u00e7\u00e3o ou configura\u00e7\u00e3o de um PLC geralmente requer um software propriet\u00e1rio do fabricante. Os dispositivos em uma rede de controle de processos podem se comunicar com os PLCs por meio de conex\u00f5es seriais ou, mais recentemente, via Ethernet, por meio de protocolos baseados em TCP\/IP. J\u00e1 os protocolos usados durante as opera\u00e7\u00f5es normais podem ser abertamente padronizados, por exemplo, Modbus TCP, ou espec\u00edficos do fornecedor.<\/p>\n<p>O gr\u00e1fico a seguir mostra uma linha do tempo com o lan\u00e7amento de v\u00e1rios modelos de PLC, juntamente com as\u00a0<b>vulnerabilidades<\/b>\u00a0descobertas e suas\u00a0<b>explora\u00e7\u00f5e<\/b>\u00a0e as vers\u00f5es espec\u00edficas do protocolo.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39a.png\" alt=\"imagen ilustrativa\" \/><\/center><b>Beresford<\/b>\u00a0demonstrou uma s\u00e9rie de ataques ao PLC S7-1200, por exemplo, ataque de repeti\u00e7\u00e3o, desvio de autentica\u00e7\u00e3o, inicializa\u00e7\u00e3o ou parada de um PLC etc. O trabalho foi baseado no firmware v2 do PLC, que n\u00e3o inclui nenhum mecanismo de seguran\u00e7a no protocolo de comunica\u00e7\u00e3o.<\/p>\n<p><b>&#8220;O PLC inject &#8221;\u00a0<\/b>explora o protocolo S7Comm (a \u00faltima gera\u00e7\u00e3o do protocolo da Siemens, que n\u00e3o inclui um mecanismo anti-replay) e tem a capacidade de adicionar c\u00f3digos ao ciclo de programa principal de um PLC sem interrup\u00e7\u00e3o dos servi\u00e7os. Tamb\u00e9m foi demonstrado que era poss\u00edvel introduzir um proxy de rede em um PLC Siemens S7-300 como backdoor para a rede de controle de processos.<\/p>\n<p>Spenneberg demonstrou um ataque semelhante a um worm, chamado\u00a0<b>PLC Blaster<\/b>, que pode se espalhar entre PLCs. O worm explora vulnerabilidades no protocolo S7CommPlus e em uma vers\u00e3o mais recente do protocolo com um mecanismo anti-replay. O malware \u00e9 carregado em um PLC por meio de um cabo Ethernet. O carregamento tamb\u00e9m inclui bytes de pacotes de rede necess\u00e1rios para programar outros PLCs. Em seguida, o PLC afetado faz uma varredura autom\u00e1tica da rede, conecta-se a outros PLCs e tenta carregar o c\u00f3digo malicioso para eles.<\/p>\n<p>Em 2017, L. Mart\u00edn-Liras apresentou uma an\u00e1lise comparativa entre tr\u00eas protocolos propriet\u00e1rios usados por PLCs. Os tr\u00eas protocolos envolvidos s\u00e3o o protocolo S7Comm, o protocolo UMAS (usado por PLCs Modicon) e o protocolo Opto Comm (usado por PLCs Opto). As informa\u00e7\u00f5es existentes sobre as vulnerabilidades dos protocolos foram investigadas. A an\u00e1lise tamb\u00e9m investigou a possibilidade de v\u00e1rios ataques aos PLCs, incluindo DoS, altera\u00e7\u00e3o de firmware e altera\u00e7\u00e3o do programa do usu\u00e1rio, etc. Uma publica\u00e7\u00e3o mais recente, feita em 2018 por L. Ghaleb, documentou a pesquisa sobre as vulnerabilidades do protocolo S7 especificamente, que demonstrou um ataque\u00a0<b>Man-in-the-Middle, modifica\u00e7\u00e3o de comando e ataque de repeti\u00e7\u00e3o<\/b>\u00a0em um PLC S7-400 usando o protocolo S7Comm.<\/p>\n<p>Em 2018, os autores publicaram um artigo preliminar relacionado \u00e0 pesquisa que foi usada como refer\u00eancia para esta postagem. Foi demonstrado que era poss\u00edvel realizar um ataque geral \u00e0 rede, com base em envenenamento por ARP, no PLC S7 -1211C (firmware 4) e no Portal TIA. Os autores tamb\u00e9m demonstraram que um pacote\u00a0<b>&#8220;S7-ACK&#8221;\u00a0<\/b>de 7 bytes, &#8220;03 00 00 07 02 f0 00&#8221;, pode ser explorado para sequestro de sess\u00e3o e ataques DoS.<\/p>\n<p>Em 2019, Biham pesquisou mais a fundo os protocolos S7 da Siemens e demonstrou ataques para reprogramar os PLCs S7, que foram denominados\u00a0<b>Rogue7<\/b>.<\/p>\n<p class=\"cuerpo-nota\"><span class=\"subtitulo-nota\">Protocolo S7Commplus<\/span><\/p>\n<p>O protocolo S7CommPlus facilita a transfer\u00eancia de informa\u00e7\u00f5es operacionais e de configura\u00e7\u00e3o essenciais, como a l\u00f3gica do PLC, informa\u00e7\u00f5es de diagn\u00f3stico, detalhes de configura\u00e7\u00e3o e valores de blocos de dados entre PLCs e software de engenharia. A imagem a seguir mostra a pilha de protocolos dissecada de um pacote que transporta dados do S7CommPlus, conforme visualizado no Wireshark.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39b.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\">A porta TCP 102 \u00e9 usada para todas as comunica\u00e7\u00f5es do S7. O protocolo \u00e9 executado em ISO sobre TCP (TPKT) e Protocolo de Transporte Orientado \u00e0 Conex\u00e3o (COTP). Se um operador iniciar uma conex\u00e3o com um PLC a partir do TIA-Portal, ele o far\u00e1 pressionando o bot\u00e3o &#8220;Go online&#8221; (Conectar).<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39c.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\"><b>Ap\u00f3s pression\u00e1-lo internamente, ocorrem as seguintes etapas:<\/b><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>O gateway TIA transmite um pacote Identify All do Discovery Protocol e Profinet Basic Configuration (PN -DCP) para a rede<\/li>\n<li>Todos os PLCs ou dispositivos respondem ao Portal TIA com um pacote PN-DCP &#8220;Identify OK&#8221;.<\/li>\n<li>O TIA Portal inicializa um handshake TCP com o PLC, e o PLC responder\u00e1.<\/li>\n<li>O TIA Gateway e o PLC trocam informa\u00e7\u00f5es de conex\u00e3o COTP.<\/li>\n<li>O TIA Gateway envia o primeiro pacote S7 (solicita\u00e7\u00e3o de conex\u00e3o do TIA).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39d.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>O PLC responde com um pacote contendo um desafio anti-replay de 1 byte e 20 bytes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39e.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>O TIA Portal responde com um pacote que cont\u00e9m um byte anti-replay e um array de 132 bytes, que \u00e9 a resposta anti-replay<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39f.png\" alt=\"imagen ilustrativa\" \/><\/center><center>(Representa\u00e7\u00e3o de posi\u00e7\u00f5es de bytes)<\/center>\u00a0\u00a0<b>\u2022<\/b>O Portal TIA envia pacotes com a a\u00e7\u00e3o solicitada para o PLC, juntamente com uma verifica\u00e7\u00e3o de integridade de 20 bytes em cada pacote<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39g.png\" alt=\"imagen ilustrativa\" \/><\/center>As figuras nos pontos 5 a 7 mostram o TIA Gateway e o PLC trocando pacotes S7 de solicita\u00e7\u00e3o, desafio e resposta, nos quais bytes especiais est\u00e3o envolvidos no processo. Por exemplo\u00a0<mark><b>1C9C381<\/b><\/mark>. Se algum dos pacotes do S7CommPlus n\u00e3o incluir os bytes anti-replay ou os valores de verifica\u00e7\u00e3o de integridade corretos, a outra extremidade da conex\u00e3o enviar\u00e1 um pacote TCP com a flag reset ativada e a sess\u00e3o ser\u00e1 encerrada.<\/p>\n<p class=\"cuerpo-nota\">Quando o bot\u00e3o &#8220;Go online&#8221; (Conectar) no Portal TIA for clicado, uma sess\u00e3o ser\u00e1 iniciada usando o protocolo S7, como no Portal TIA. O operador pode carregar programas personalizados, diagnosticar problemas relacionados ao PLC, visualizar dados em tempo real dos blocos de dados do PLC, configurar a comunica\u00e7\u00e3o entre o PLC e outros dispositivos, etc. Durante um per\u00edodo on-line com o PLC S7 -1211C, v\u00e1rios pacotes s\u00e3o enviados ao Portal TIA durante o tempo ocioso, especificando detalhes e o status ao vivo do PLC, por exemplo, tempo de ciclo, uso de mem\u00f3ria etc.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39h.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\"><span class=\"subtitulo-nota\">Byte Anti-Replay<\/span><\/p>\n<p>O protocolo S7CommPlus usa um valor de 1 byte no mecanismo anti-replay, que tem sido usado desde a vers\u00e3o 3 do firmware do S7-1200. Quando o Portal TIA inicia uma conex\u00e3o com um PLC, o PLC envia um byte de desafio no intervalo de 0x06 a 0x7f. O Portal TIA responder\u00e1 ao PLC com uma resposta que \u00e9 calculada pela adi\u00e7\u00e3o do valor 0x80 ao desafio. Por exemplo, se o desafio do PLC for 0x08, a resposta do Portal TIA seria 0x08 + 0x80 =\u00a0<mark><b>0x88<\/b><\/mark>, conforme mostrado nos pontos 6 e 7. O desafio est\u00e1 na posi\u00e7\u00e3o de byte 25 e a resposta est\u00e1 nos bytes 24 e 29 dos respectivos pacotes.<\/p>\n<p class=\"cuerpo-nota\"><span class=\"subtitulo-nota\">Criptografia no pacote de resposta<\/span><\/p>\n<p>Desde a vers\u00e3o 4 do firmware, o pacote de resposta do Portal TIA precisa incluir v\u00e1rios bytes, al\u00e9m do byte \u00fanico anti-replay discutido acima. Em 2017, Cheng descobriu duas cifras de 16 bytes envolvidas no pacote, em que a segunda cifra depende da primeira. Os dois valores de 16 bytes come\u00e7am nos bytes 235 e 291 do pacote de resposta S7, conforme mostrado no ponto 7. A primeira criptografia \u00e9 uma opera\u00e7\u00e3o XOR, enquanto a segunda \u00e9 gerada por um algoritmo mais complexo.<\/p>\n<p><span class=\"subtitulo-nota\">Fun\u00e7\u00e3o do pacote &#8220;Encryption&#8221; (Criptografia)<\/span><\/p>\n<p>Depois de enviar o pacote de resposta para o PLC, o Portal TIA come\u00e7ar\u00e1 a enviar bytes relacionados \u00e0s fun\u00e7\u00f5es do Portal TIA, que s\u00e3o chamados de &#8220;pacotes de fun\u00e7\u00e3o&#8221;. Todos esses pacotes precisam incluir um valor de &#8220;criptografia&#8221; de 32 bytes, conforme mostrado no ponto 8. Descobriu-se que essa &#8220;criptografia&#8221; \u00e9 uma verifica\u00e7\u00e3o de integridade fornecida pelo Hash-based Message Authentication Code (HMAC) e est\u00e1 relacionada ao byte anti-replay. Cheng prop\u00f4s a possibilidade de iniciar e interromper um PLC explorando o protocolo, mas n\u00e3o fornece detalhes que descrevem as vulnerabilidades do protocolo e apenas aponta que a fun\u00e7\u00e3o de verifica\u00e7\u00e3o de integridade do pacote \u00e9 uma &#8220;cifra&#8221;. Biham identificou posteriormente o mecanismo subjacente usado no protocolo S7 como um HMAC e descobriu que a chave do HMAC \u00e9 trocada usando uma troca de chaves do tipo\u00a0<b>ElGamal elliptic curve<\/b>.<\/p>\n<p class=\"cuerpo-nota\">No entanto, os mecanismos espec\u00edficos do protocolo n\u00e3o foram descritos, por exemplo, cada campo da resposta anti-replay \u00e9 vagamente identificado com pseudoc\u00f3digo, enquanto os detalhes da execu\u00e7\u00e3o algor\u00edtmica est\u00e3o ausentes. Da mesma forma, na fun\u00e7\u00e3o de c\u00e1lculo do pacote HMAC, dois conjuntos de HMACs s\u00e3o descobertos com duas chaves diferentes que n\u00e3o foram identificadas anteriormente.<\/p>\n<p><span class=\"subtitulo-nota\">An\u00e1lise do protocolo S7CommPlus<\/span><\/p>\n<p>Foi realizada uma an\u00e1lise manual usando ferramentas como Scapy e WinDbg para examinar a comunica\u00e7\u00e3o entre o Gateway TIA e os PLCs durante v\u00e1rias sess\u00f5es de comunica\u00e7\u00e3o diferentes. No primeiro experimento, ao inspecionar manualmente os pacotes, incluindo a manipula\u00e7\u00e3o de bytes usando o Scapy, descobriu-se que os bytes rotulados nos pontos 5 a 8 serviam a v\u00e1rias finalidades espec\u00edficas, que ser\u00e3o explicadas a seguir. Como exemplo, as figuras 5-7 mostram o TIA Gateway e o PLC trocando pacotes S7 de solicita\u00e7\u00e3o, desafio e resposta, enquanto a Fig. 8 mostra um &#8220;pacote de fun\u00e7\u00e3o&#8221; subsequente. Consulte tamb\u00e9m o ponto 4, que mostra as trocas gerais em uma sess\u00e3o.<\/p>\n<p>No ponto 5,\u00a0<mark><b>1C9C381M<\/b><\/mark>\u00a0indica um n\u00famero de sess\u00e3o do servidor que \u00e9 gerado pelo TIA Portal sempre que uma sess\u00e3o de comunica\u00e7\u00e3o \u00e9 iniciada. No entanto, esse n\u00famero pode ser reutilizado e n\u00e3o \u00e9 verificado pelo PLC. Em\u00a0<mark><b>16 2913981<\/b><\/mark>\u00a0h\u00e1 outro n\u00famero de sess\u00e3o, ou n\u00famero de sess\u00e3o &#8220;PC&#8221;, que \u00e9 gerado toda vez que o TIA Portal \u00e9 aberto (ou seja, na primeira vez que o TIA Portal \u00e9 aberto ou ap\u00f3s a reinicializa\u00e7\u00e3o do computador, da\u00ed o nome n\u00famero de sess\u00e3o &#8220;PC&#8221;). Esse n\u00famero tamb\u00e9m pode ser reutilizado.<\/p>\n<p><mark><b>01 c9 c3 81<\/b><\/mark>\u00a0\u00e9 o valor da sess\u00e3o do servidor repetido diretamente em hexadecimal. O segmento destacado com o ponto, em contraste com outros bytes do mesmo pacote, \u00e9 significativamente diferente para cada sess\u00e3o. Parece mais prov\u00e1vel que tenha sido gerado por uma fun\u00e7\u00e3o de hash ou pseudo-aleat\u00f3ria. O PLC verifica esses tr\u00eas blocos, os segmentos de 9 bytes e 8 bytes, respectivamente, do ponto 7, e envia imediatamente um pacote TCP com um sinalizador de redefini\u00e7\u00e3o se os blocos de bytes n\u00e3o forem os esperados pelo PLC; caso contr\u00e1rio, a comunica\u00e7\u00e3o continua. Esses bytes s\u00e3o gerados por um algoritmo espec\u00edfico. Ap\u00f3s a resposta do Portal TIA, se a conex\u00e3o for aceita, o PLC envia um pacote S7CommPlus. O pacote S7CommPlus conter\u00e1 informa\u00e7\u00f5es relacionadas \u00e0s fun\u00e7\u00f5es fornecidas pelo TIA Portal.<\/p>\n<p class=\"cuerpo-nota\">Atacantes sofisticados poderiam identificar esses bytes e usar essas informa\u00e7\u00f5es para explorar ainda mais o protocolo.<\/p>\n<p><span class=\"subtitulo-nota\">An\u00e1lise do TIA-Portal<\/span><\/p>\n<p><b>O WinDbg\u00a0<\/b>foi usado para realizar uma an\u00e1lise do TIA Portal. Esta se\u00e7\u00e3o descreve em resumo o processo realizado durante os experimentos. A fun\u00e7\u00e3o que realiza uma pesquisa de dispositivos acess\u00edveis no TIA Portal foi usada para gerar o tr\u00e1fego do S7CommPlus.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39i.png\" alt=\"imagen ilustrativa\" \/><\/center><center>Diagrama de refer\u00eancia An\u00e1lise do TIA-Portal<\/center>Para apoiar a an\u00e1lise, v\u00e1rios pontos de interrup\u00e7\u00e3o foram estabelecidos durante a comunica\u00e7\u00e3o entre o software e o PLC. Um processo de an\u00e1lise manual identificou que o array de bytes muda significativamente cada vez que o TIA Portal faz uma solicita\u00e7\u00e3o. Esse bloco de 20 bytes n\u00e3o tem rela\u00e7\u00e3o \u00f3bvia com o payload do pacote de solicita\u00e7\u00e3o de conex\u00e3o, conforme confirmado pelo envio exatamente do mesmo pacote de solicita\u00e7\u00e3o de conex\u00e3o para o PLC usando\u00a0<b>o Scapy<\/b>.<\/p>\n<p>O primeiro desafio para o analista \u00e9 identificar a parte do ecossistema a ser visada e o ponto de entrada da an\u00e1lise, para o que s\u00e3o fornecidas algumas\u00a0<b>dicas a seguir<\/b>.<\/p>\n<p class=\"cuerpo-nota\">Para iniciar a an\u00e1lise, a fun\u00e7\u00e3o de pesquisa do Portal TIA \u00e9 usada uma vez sem nenhum ponto de interrup\u00e7\u00e3o e uma sess\u00e3o de comunica\u00e7\u00e3o completa \u00e9 gerada (encerrada por um pacote de reinicializa\u00e7\u00e3o TCP do PLC). Ao iniciar manualmente um ponto de interrup\u00e7\u00e3o por meio do WinDbg no software e, em seguida, usar o comando &#8220;s&#8221; para pesquisar os 20 bytes do PLC na mem\u00f3ria, o endere\u00e7o de mem\u00f3ria que cont\u00e9m esse bloco de 20 bytes pode ser identificado. Esse endere\u00e7o de mem\u00f3ria pode ser localizado com uma \u00fanica pesquisa &#8220;s&#8221; ou, muitas vezes, apenas a \u00e1rea que armazena todo o pacote de desafio S7 recebido \u00e9 localizada.<\/p>\n<p>Outra pesquisa deve ser feita usando um ponto de interrup\u00e7\u00e3o de acesso e rastreando o endere\u00e7o espec\u00edfico no qual esse array de 20 bytes \u00e9 gravado. Uma vez identificado esse endere\u00e7o, ele n\u00e3o ser\u00e1 alterado at\u00e9 que o Portal TIA seja reiniciado. Um ponto de interrup\u00e7\u00e3o de acesso, &#8220;ponto de interrup\u00e7\u00e3o A&#8221;, deve ser estabelecido nesse endere\u00e7o. Depois de inicializar outra comunica\u00e7\u00e3o S7 usando o TIA Portal, verificou-se que o ponto de interrup\u00e7\u00e3o A foi acessado por dois locais diferentes, ambos fun\u00e7\u00f5es que envolvem a c\u00f3pia do bloco de 20 bytes para outro endere\u00e7o. A primeira fun\u00e7\u00e3o copia o endere\u00e7o apontado pelo ponto de interrup\u00e7\u00e3o A, enquanto a segunda fun\u00e7\u00e3o copia os bytes para um endere\u00e7o espec\u00edfico. Portanto, para uma investiga\u00e7\u00e3o mais aprofundada, dois outros pontos de interrup\u00e7\u00e3o de acesso, o ponto de interrup\u00e7\u00e3o B e o ponto de interrup\u00e7\u00e3o C, foram estabelecidos para cada um dos dois endere\u00e7os identificados.<\/p>\n<p>Descobriu-se que o ponto de interrup\u00e7\u00e3o B aponta para o endere\u00e7o do 3\u00ba byte e o ponto de interrup\u00e7\u00e3o C armazena do 3\u00ba ao 18\u00ba byte do array de 20 bytes. Descobriu-se que esse valor de 16 bytes (bytes 3 a 18), ou &#8220;matriz de desafio&#8221;, desempenha uma fun\u00e7\u00e3o importante no restante do processo de gera\u00e7\u00e3o de bytes. Al\u00e9m disso, descobriu-se que os dois locais de mem\u00f3ria apontados pelos pontos de interrup\u00e7\u00e3o B e C est\u00e3o envolvidos na gera\u00e7\u00e3o de bytes para a resposta do S7CommPlus e o pacote de fun\u00e7\u00f5es, respectivamente.<\/p>\n<p>\u00c9 nesse ponto que a dll &#8220;OMSp_core_managed.dll&#8221; aparece pela primeira vez e os endere\u00e7os apontados pelo ponto de interrup\u00e7\u00e3o A, B e C est\u00e3o dentro do intervalo dessa dll. Durante a an\u00e1lise, foi confirmado que esse m\u00f3dulo, ou dll, \u00e9 onde ocorre toda a gera\u00e7\u00e3o dos bytes anti-replay.<\/p>\n<p>Convidamos voc\u00ea a ler\u00a0<b>Vulnerability Analysis of S7 PLCs: Manipulating the Security Mechanism (An\u00e1lise de vulnerabilidade de PLCs S7: Manipula\u00e7\u00e3o do mecanismo de seguran\u00e7a).\u00a0<\/b>O artigo completo sobre a pesquisa na qual esta postagem se baseia e o trabalho detalhado no TIA-Portal podem ser encontrados nas refer\u00eancias.<\/p>\n<p class=\"cuerpo-nota\"><b>Ele aborda em detalhes t\u00f3picos como:<\/b><\/p>\n<ul>\n<li>Pacote de respostas do TIA Portal S7<\/li>\n<li>Bytes manipul\u00e1veis<\/li>\n<li>Primeira criptografia<\/li>\n<li>Segunda criptografia<\/li>\n<li>Algoritmo de aumento de campo finito<\/li>\n<li>Algoritmo A480<\/li>\n<li>Pacotes de recursos do TIA-Portal<\/li>\n<li>Verifica\u00e7\u00e3o de integridade<\/li>\n<\/ul>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39j.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\"><span class=\"subtitulo-nota\">HMAC<\/span><\/p>\n<p>Ap\u00f3s a troca de pacotes de desafio e resposta S7, os pacotes de fun\u00e7\u00e3o S7 ser\u00e3o enviados. Esses pacotes incluem a finalidade e os detalhes da comunica\u00e7\u00e3o e, como visto no ponto 8, \u00e9 mostrado um dos pacotes que cont\u00e9m informa\u00e7\u00f5es de controle enviadas pelo TIA Portal. Cada pacote deve incluir os 32 bytes de &#8220;criptografia&#8221; (como Cheng os chama) antes do payload, conforme mostrado no delineamento de bytes. Nessa an\u00e1lise, descobriu-se que esse bloco de 32 bytes \u00e9, na verdade, uma verifica\u00e7\u00e3o de integridade HMAC para o pacote. Essa verifica\u00e7\u00e3o de integridade tem duas finalidades: garantir que as cargas \u00fateis n\u00e3o sejam adulteradas e autenticar o remetente (j\u00e1 que as chaves do HMAC s\u00e3o conhecidas apenas pelos hosts envolvidos na conex\u00e3o). Para gerar esse valor de 32 bytes, foram encontrados dois c\u00e1lculos de HMAC.<\/p>\n<p>O primeiro \u00e9 usado para gerar a chave para todos os HMACs subsequentes. O segundo \u00e9 usado para assinar todos os pacotes de fun\u00e7\u00f5es. Ambos os HMACs s\u00e3o baseados no mesmo algoritmo de hashing do restante do mecanismo. O gr\u00e1fico a seguir mostra como os dois HMACs geram os bytes de integridade.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39k.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\"><span class=\"subtitulo-nota\">Primeiro HMAC<\/span><\/p>\n<p>O c\u00e1lculo do primeiro HMAC \u00e9 realizado antes do envio do pacote de resposta S7 ao PLC. O texto simples do HMAC consiste em um valor de 8 bytes e na matriz de desafio de 16 bytes, lida no ponto de interrup\u00e7\u00e3o C<\/p>\n<p>Abaixo est\u00e1 um exemplo de pseudoc\u00f3digo para a gera\u00e7\u00e3o de 8 bytes, que \u00e9 essencial para verificar a integridade da fun\u00e7\u00e3o S7. Esse algoritmo n\u00e3o \u00e9 identificado como um algoritmo padronizado, portanto o pseudoc\u00f3digo \u00e9 gerado pela an\u00e1lise do c\u00f3digo assembler. Essa an\u00e1lise \u00e9 instrutiva do ponto de vista da seguran\u00e7a, pois o algoritmo de gera\u00e7\u00e3o de 8 bytes \u00e9 uma parte essencial da gera\u00e7\u00e3o do byte de integridade.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39l.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\">O valor combinado de 24 bytes \u00e9 ent\u00e3o assinado usando uma chave de 24 bytes gerada no setor \u24bb do diagrama de refer\u00eancia do TIA-Portal. A sa\u00edda de 32 bytes do HMAC deve ser reduzida a um valor de 24 bytes, que deve ser armazenado e usado como a chave do segundo HMAC.<\/p>\n<p><span class=\"subtitulo-nota\">Segundo HMAC<\/span><\/p>\n<p>O segundo HMAC \u00e9 usado para gerar os bytes de verifica\u00e7\u00e3o de integridade reais, que s\u00e3o inseridos no pacote de fun\u00e7\u00e3o enviado por ambas as partes. Aqui foi identificado pela primeira vez como a chave do segundo HMAC pode ser o resultado do primeiro HMAC e, al\u00e9m disso, qual parte do payload do pacote de fun\u00e7\u00e3o S7 \u00e9 usada como entrada do segundo HMAC. O comprimento do pacote de fun\u00e7\u00f5es nem sempre \u00e9 o mesmo, mas o HMAC de 32 bytes do pacote sempre come\u00e7a no 13\u00ba byte do pacote. A entrada desse HMAC compreende todos os bytes que seguem o HMAC no pacote, ou seja, do 45\u00ba byte em diante, excluindo o rodap\u00e9 do pacote, que normalmente \u00e9 os \u00faltimos quatro bytes (por exemplo, no ponto 8 \u00e9 &#8220;72 03 00 00&#8221; no final do pacote). Como o tamanho de cada pacote e as informa\u00e7\u00f5es que ele cont\u00e9m podem variar, o tamanho e o conte\u00fado do rodap\u00e9 variam de acordo. No entanto, para reproduzir o pacote, considerando que a chave \u00e9 conhecida, um m\u00e9todo simples de tentativa e erro poderia identificar qual byte \u00e9 necess\u00e1rio como entrada HMAC.<\/p>\n<p><span class=\"subtitulo-nota\">Poss\u00edveis participa\u00e7\u00f5es<\/span><\/p>\n<p>A an\u00e1lise acima do protocolo S7CommPlus e do Portal TIA revela a possibilidade de explorar o protocolo e o software. V\u00e1rias explora\u00e7\u00f5es validadas s\u00e3o discutidas a seguir, bem como poss\u00edveis ataques adicionais que poderiam ser realizados por um invasor suficientemente motivado para analisar ainda mais as descobertas apresentadas acima e prosseguir com o desenvolvimento de explora\u00e7\u00f5es maliciosas.<\/p>\n<p><span class=\"subtitulo-nota\">Altera\u00e7\u00f5es n\u00e3o autorizadas no status do PLC<\/span><\/p>\n<p>Como todas as a\u00e7\u00f5es executadas no Portal TIA s\u00e3o enviadas ao PLC usando o protocolo S7, usando as descobertas desta pesquisa, pode ser poss\u00edvel causar interrup\u00e7\u00f5es em v\u00e1rios processos, incluindo: reprograma\u00e7\u00e3o de um PLC, altera\u00e7\u00e3o do valor de uma vari\u00e1vel do PLC, defini\u00e7\u00e3o da senha de um PLC e altera\u00e7\u00e3o do estado do PLC (do estado de funcionamento para o estado de parada e vice-versa). Para fins de demonstra\u00e7\u00e3o, o escopo do trabalho atual concentrou-se em verificar se \u00e9 poss\u00edvel alterar remotamente o estado de um PLC, ou seja, parar um PLC em funcionamento. As experi\u00eancias mostraram que isso pode ser feito usando dois pacotes de fun\u00e7\u00e3o S7, al\u00e9m da resposta anti-replay, que inclui os 132 bytes identificados no item 7.<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39m.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\">Esta imagem mostra um dos pacotes de fun\u00e7\u00e3o falsificados necess\u00e1rios para parar um PLC. O pacote falsificado \u00e9 gerado com base nas descobertas documentadas na se\u00e7\u00e3o An\u00e1lise do TIA-Portal. Com exce\u00e7\u00e3o do byte anti-replay (ponto 6), dos bytes de verifica\u00e7\u00e3o de integridade e do n\u00famero de sequ\u00eancia, todos os outros bytes s\u00e3o iguais nos dois pacotes (um normal e um falsificado). Vale a pena mencionar novamente que, mesmo em sess\u00f5es S7 diferentes, todos os bytes anti-reprodu\u00e7\u00e3o podem ser gerados para qualquer pacote falsificado com base nas mesmas chaves de criptografia e bytes necess\u00e1rios que permanecer\u00e3o constantes com base nos hashes nas caixas \u24b9 e \u24ba e \u24bb no Diagrama de Refer\u00eancia do TIA-Portal.<\/p>\n<p>Conforme mencionado, tamb\u00e9m \u00e9 poss\u00edvel reprogramar um PLC usando o protocolo S7. Embora haja um mecanismo integrado de prote\u00e7\u00e3o contra c\u00f3pia, desde que o invasor possa identificar a rela\u00e7\u00e3o entre o n\u00famero de s\u00e9rie do PLC que \u00e9 enviado pela l\u00f3gica do PLC e a pr\u00f3pria l\u00f3gica do PLC, um ataque para reprogramar a l\u00f3gica pode ser vi\u00e1vel.<\/p>\n<p><span class=\"subtitulo-nota\">Comunica\u00e7\u00e3o DoS<\/span><\/p>\n<p>Al\u00e9m de explorar a funcionalidade normal fornecida pelo Portal TIA, foi demonstrado que as descobertas possibilitam um ataque DOS por meio do envio de pacotes criados que estabelecem e mant\u00eam uma nova sess\u00e3o S7 em um PLC. Isso impedir\u00e1 que o Portal TIA se conecte ao PLC. Essa explora\u00e7\u00e3o \u00e9 poss\u00edvel porque o S7-1211C n\u00e3o permitir\u00e1 que uma nova sess\u00e3o seja iniciada se j\u00e1 existir uma sess\u00e3o anterior.<\/p>\n<p>Para implementar essa explora\u00e7\u00e3o, sup\u00f5e-se que n\u00e3o haja nenhuma sess\u00e3o atual entre o PLC e o Portal TIA. Um host na mesma LAN que o PLC pode iniciar uma conex\u00e3o TCP com o PLC usando o handshake usual e a troca de pacotes COTP. Ao responder ao pacote de desafio do PLC com um pacote criado contendo os bytes anti-replay apropriados, seguido por pacotes &#8220;S7-ACK&#8221;, o invasor pode impedir uma conex\u00e3o genu\u00edna do Portal TIA. Para manter uma sess\u00e3o normal, por exemplo, para pedir \u00e0 outra extremidade que aguarde enquanto um processo est\u00e1 em execu\u00e7\u00e3o, qualquer conex\u00e3o final pode responder com esse pacote S7-ACK, aparentemente indefinidamente.<\/p>\n<p>Essa explora\u00e7\u00e3o \u00e9 poss\u00edvel porque o pacote &#8220;S7-ACK&#8221;, &#8220;03 00 00 00 07 02 F0 00&#8221;, n\u00e3o tem fun\u00e7\u00f5es de verifica\u00e7\u00e3o de integridade ou anti-reprodu\u00e7\u00e3o e pode ser usado para responder a qualquer pacote S7. Portanto, a sess\u00e3o pode ser mantida viva sem que o invasor obtenha nenhuma informa\u00e7\u00e3o adicional. Embora o PLC continue a executar a l\u00f3gica pr\u00e9-programada, n\u00e3o \u00e9 poss\u00edvel interromp\u00ea-lo, reconfigur\u00e1-lo ou reprogram\u00e1-lo. Uma reinicializa\u00e7\u00e3o manual pode encerrar a sess\u00e3o existente, mas um host ou dispositivo comprometido na rede pode reiniciar uma nova sess\u00e3o do DOS. Esse ataque pode ser cr\u00edtico por si s\u00f3, mas tamb\u00e9m pode permitir um ataque em maior escala.<\/p>\n<p><span class=\"subtitulo-nota\">Sequestro de sess\u00e3o<\/span><\/p>\n<p>A explora\u00e7\u00e3o descrita acima pressup\u00f5e que n\u00e3o h\u00e1 conex\u00e3o entre o Portal TI A e o PLC de destino. No entanto, essa explora\u00e7\u00e3o poderia ser combinada com um ataque de rede tradicional, usando pacotes de explora\u00e7\u00e3o criados juntamente com envenenamento de ARP, para sequestrar uma sess\u00e3o para o PLC e causar um DOS para que o Portal TIA n\u00e3o possa se reconectar. Os autores j\u00e1 documentaram anteriormente como o sequestro de sess\u00e3o por meio de envenenamento de ARP pode funcionar nesse contexto. Isso pode ser feito descartando ativamente todos os pacotes do software de engenharia depois de roubar a sess\u00e3o S7, o que faz com que o lado do Portal TIA da conex\u00e3o seja encerrado. Ao mesmo tempo, o lado PLC da sess\u00e3o pode ser mantido vivo por um invasor que cria e envia pacotes S7-ACK. Durante esse ataque, uma op\u00e7\u00e3o \u00e9 usar respostas ARP excessivas para sobrecarregar quaisquer outros pacotes ARP depois que a sess\u00e3o for roubada. No entanto, para evitar a gera\u00e7\u00e3o de muito &#8220;ru\u00eddo&#8221; ARP, a sess\u00e3o S7 roubada poderia ser encerrada e substitu\u00edda por uma nova sess\u00e3o DOS, conforme descrito na se\u00e7\u00e3o anterior. Esse ataque consegue duas coisas:<\/p>\n<p><center><img decoding=\"async\" src=\"https:\/\/wwww.base4sec.com\/assets\/images\/blog\/nota-39n.png\" alt=\"imagen ilustrativa\" \/><\/center><\/p>\n<p class=\"cuerpo-nota\">1) Um &#8220;footprint&#8221; de rede menor seria gerado em compara\u00e7\u00e3o com o roubo de sess\u00e3o por meio de envenenamento de ARP.<br \/>\n2) \u00c9 poss\u00edvel realizar o ataque DOS sem esperar que a sess\u00e3o leg\u00edtima termine, pois uma sess\u00e3o DOS n\u00e3o pode ser iniciada mesmo que exista uma leg\u00edtima.<\/p>\n<p><span class=\"subtitulo-nota\">Elimina\u00e7\u00e3o do programa principal<\/span><\/p>\n<p>Foi descoberto um novo exploit baseado no protocolo S7CommPlus que pode manipular a l\u00f3gica do PLC e excluir o bloco Main Object dos PLCs S7 -1200 e, fazendo com que o TIA-Portal forne\u00e7a informa\u00e7\u00f5es incompletas ou incorretas sobre o PLC Isso pode ser causado pela reprodu\u00e7\u00e3o de pacotes S7 capturados em um caso de uso anormal.<\/p>\n<p>A seguir, descrevemos as etapas de repeti\u00e7\u00e3o da explora\u00e7\u00e3o, incluindo a gera\u00e7\u00e3o de pacotes, a repeti\u00e7\u00e3o dos pacotes e o comportamento esperado da gera\u00e7\u00e3o dos pacotes que ser\u00e3o repetidos como a explora\u00e7\u00e3o:<\/p>\n<ul>\n<li>Crie um novo projeto no TIA-Portal e adicione um PLC ao projeto com a vers\u00e3o do firmware do PLC de destino (que pode ser obtida por meio da transmiss\u00e3o LLDP do PLC ou fazendo login no PLC).<\/li>\n<li>Carregue um projeto padr\u00e3o (com apenas um bloco de objeto Main vazio) no PLC de teste (um PLC com a mesma vers\u00e3o de firmware que o PLC de destino).<\/li>\n<li>Certifique-se de que o PLC esteja no estado de desligamento.<\/li>\n<li>Exclua o bloco do objeto principal no projeto e inicie uma captura de dados, ume, em seguida, carregue o projeto com a op\u00e7\u00e3o &#8220;Software (changes)&#8221; a captura depois que o PLC encerrar a sess\u00e3o usando um pacote TCP com os sinalizadores Reset e Finish definidos .<\/li>\n<li>Extraia o pacote inteiro enviado pelo TIA-Portal para uso no script, que foi enviado na comunica\u00e7\u00e3o anterior<\/li>\n<\/ul>\n<p class=\"cuerpo-nota\">O envio (repeti\u00e7\u00e3o) desses pacotes capturados a um PLC de destino, que tenha a mesma vers\u00e3o de firmware e que esteja no estado de parada, causar\u00e1 comportamentos anormais. Os pacotes capturados de firmware diferente causar\u00e3o comportamentos diferentes em uma vers\u00e3o de firmware diferente. Essa explora\u00e7\u00e3o foi testada no S7-1211C DC\/DC\/DC, vers\u00f5es de firmware v4.1.3 e v.4.2.3.<\/p>\n<p>Para a vers\u00e3o 4.1.3, a captura pode ser reproduzida como est\u00e1, e o PLC reiniciar\u00e1 a conex\u00e3o depois que os pacotes criados forem enviados aos PLCs. A explora\u00e7\u00e3o pode ter os seguintes comportamentos, dependendo da configura\u00e7\u00e3o e do estado do PLC:<\/p>\n<ul>\n<li>Ao se conectar ao PLC infectado, o PLC n\u00e3o pode ser colocado em um estado de execu\u00e7\u00e3o. Se um usu\u00e1rio tentar fazer o download do c\u00f3digo personalizado do TIA-Portal para o PLC, o portal indicar\u00e1 que o programa entre o PLC e o PLC \u00e9 o mesmo, sem exibir nenhum erro. No entanto, o PLC est\u00e1 sendo executado sem o Main Object Block, ou seja, ele n\u00e3o executa nenhuma a\u00e7\u00e3o. Uma poss\u00edvel solu\u00e7\u00e3o \u00e9 desconectar e fazer o download das configura\u00e7\u00f5es completas para o PLC usando a op\u00e7\u00e3o de download &#8220;Hardware and Software (changes only)&#8221;. Uma janela para sincronizar o programa ser\u00e1 exibida antes do download, mostrando que h\u00e1 diferen\u00e7as entre a l\u00f3gica no PLC e o projeto no Portal TIA.<\/li>\n<li>Quando conectado, o PLC n\u00e3o pode ser colocado em estado de execu\u00e7\u00e3o. Se um usu\u00e1rio tentar fazer o download do c\u00f3digo personalizado para o PLC, uma janela de sincroniza\u00e7\u00e3o ser\u00e1 exibida antes do download. Al\u00e9m disso, n\u00e3o ser\u00e1 exibido nenhum erro ou um erro dizendo &#8220;O bloco do objeto principal n\u00e3o existe&#8221;<\/li>\n<li>Quando conectado, o PLC pode ser colocado em um estado de execu\u00e7\u00e3o. No entanto, nenhuma l\u00f3gica ser\u00e1 de fato executada no PLC, e todos os blocos de programa ser\u00e3o mostrados como &#8220;s\u00f3 existem off-line&#8221; no TIA-Portal. \u00c9 necess\u00e1rio sincronizar antes de fazer o download.<\/li>\n<\/ul>\n<p>O usu\u00e1rio pode colocar o PLC no estado de execu\u00e7\u00e3o. Entretanto, nenhuma l\u00f3gica ser\u00e1 executada no bloco de objeto principal, mas a interrup\u00e7\u00e3o c\u00edclica ou a interrup\u00e7\u00e3o de hardware ainda poder\u00e1 ser executada. Se o usu\u00e1rio tentar ativar o &#8220;monitoramento&#8221; no bloco de objeto principal enquanto estiver on-line (uma op\u00e7\u00e3o do TIA-Portal que fornece informa\u00e7\u00f5es de diagn\u00f3stico do PLC em tempo real), o erro &#8220;Internal system error (error code:0xCF000AF0700008002)&#8230;&#8221; ser\u00e1 exibido. Internal error: Referenced\u00a0<b>UnFunctionalObject<\/b>\u00a0does not exist&#8221; (Erro interno: o\u00a0<b>UnFunctionalObject<\/b>\u00a0referenciado n\u00e3o existe). &#8220;.<\/p>\n<p class=\"cuerpo-nota\">Uma poss\u00edvel solu\u00e7\u00e3o \u00e9 fazer o download do projeto para o PLC, e ser\u00e1 necess\u00e1ria a sincroniza\u00e7\u00e3o manual do programa personalizado.<\/p>\n<p>Durante os testes, em duas ocasi\u00f5es o PLC entrou em um estado irrecuper\u00e1vel depois que v\u00e1rias capturas foram repetidamente reproduzidas no dispositivo. A \u00fanica solu\u00e7\u00e3o vi\u00e1vel para essa situa\u00e7\u00e3o \u00e9 uma redefini\u00e7\u00e3o de f\u00e1brica.<\/p>\n<p>Infelizmente, n\u00e3o foram feitas capturas de tela das sequ\u00eancias exatas de pacotes necess\u00e1rias, pois o comportamento parece ser um tanto aleat\u00f3rio e imprevis\u00edvel.<\/p>\n<p><span class=\"subtitulo-nota\">Recomenda\u00e7\u00f5es<\/span><\/p>\n<p>Como vimos, pelo menos dois hashes desempenham uma fun\u00e7\u00e3o importante no mecanismo anti-replay. Foi descoberto que a entrada desses hashes poderia ser manipulada modificando a mem\u00f3ria usada pelo software. Essa vulnerabilidade permite que um invasor gere uma sess\u00e3o S7 que exija apenas 17 dos 150 bytes &#8220;anti-replay&#8221; do pacote de resposta do S7CommPlus, em vez de 150 bytes (os blocos de 132 bytes, 8 bytes e 9 bytes, mais o byte anti-replay). Al\u00e9m disso, todas as chaves envolvidas, seja para a primeira cifra e a segunda cifra, seja para os HMACs nos pacotes de fun\u00e7\u00f5es, permanecem constantes em rela\u00e7\u00e3o aos hashes de entrada. Esses dois problemas reduzem significativamente a poss\u00edvel seguran\u00e7a fornecida pelo algoritmo, bem como o aparente desperd\u00edcio de recursos. Em curto prazo, a ado\u00e7\u00e3o das medidas de seguran\u00e7a propostas abaixo poderia limitar a capacidade de um invasor de realizar explora\u00e7\u00f5es semelhantes sem altera\u00e7\u00f5es significativas no projeto.<\/p>\n<p><span class=\"subtitulo-nota\">Alterar a entrada do algoritmo de hash<\/span><\/p>\n<p>Alguns bytes trocados entre o TIA Gateway e um PLC n\u00e3o s\u00e3o usados, nem h\u00e1 um impacto \u00f3bvio desses bytes na comunica\u00e7\u00e3o. Considere as seguintes constata\u00e7\u00f5es:<\/p>\n<ul>\n<li>A sess\u00e3o do servidor e a sess\u00e3o do PC, identificadas no item 5, parecem n\u00e3o ter nenhuma finalidade no protocolo e podem ser reutilizadas em sess\u00f5es diferentes, o que anula a finalidade de um n\u00famero de sess\u00e3o.<\/li>\n<li>Foi demonstrado que a &#8220;matriz de desafio&#8221; de 16 bytes no desafio de 20 bytes enviado pelo PLC desempenha uma fun\u00e7\u00e3o importante no mecanismo anti-replay. Entretanto, n\u00e3o se descobriu que os 4 bytes restantes influenciam o mecanismo anti-replay.<\/li>\n<li>No pacote de resposta do TIA-Portal S7, os bytes marcados no ponto 7 s\u00e3o gerados antes do valor de 132 bytes No entanto, eles permanecem constantes com rela\u00e7\u00e3o aos dois valores de hash e n\u00e3o foi descoberta nenhuma rela\u00e7\u00e3o com o mecanismo anti-replay.<\/li>\n<\/ul>\n<p class=\"cuerpo-nota\">Dessa forma, prop\u00f5e-se que uma op\u00e7\u00e3o para limitar a capacidade de um invasor de gerar um pacote S7 vi\u00e1vel seja incluir alguns dos bytes acima no mecanismo anti-replay. Por exemplo, sugere-se incluir a sess\u00e3o do servidor e os quatro bytes restantes do array de desafio no algoritmo de hash que gera as chaves de criptografia, juntamente com um breve hist\u00f3rico do array de desafio como parte da entrada para gerar os bytes anti-replay. Isso n\u00e3o resolver\u00e1 a amea\u00e7a de um invasor que use t\u00e9cnicas de engenharia reversa no software para obter a entrada e o algoritmo usados no mecanismo anti-replay, mas qualquer pessoa que tente fazer isso precisar\u00e1 gerar os 150 bytes anti-replay completos, incluindo a determina\u00e7\u00e3o das chaves em cada ataque, e conseguir\u00e1 obter sess\u00f5es de comunica\u00e7\u00e3o anteriores do Portal TIA.<\/p>\n<p><span class=\"subtitulo-nota\">Limite a dura\u00e7\u00e3o da sess\u00e3o<\/span><\/p>\n<p>Durante a an\u00e1lise, verificou-se que uma sess\u00e3o TCP permanecer\u00e1 ativa at\u00e9 que o Portal TIA encerre a comunica\u00e7\u00e3o, n\u00e3o reconhe\u00e7a os pacotes TCP keep alive ou os pacotes S7 enviados pelo PLC ou envie os bytes anti-replay errados. Por exemplo, se um ponto de interrup\u00e7\u00e3o for definido no TIA Portal durante a comunica\u00e7\u00e3o com o PLC, os pacotes leg\u00edtimos do S7CommPlus n\u00e3o ser\u00e3o mais enviados.<\/p>\n<p>Nesse meio tempo, o PLC enviar\u00e1 periodicamente pacotes TCP keep alive e n\u00e3o encerrar\u00e1 a comunica\u00e7\u00e3o enquanto o Portal TIA responder com o pacote TCP keep alive. Isso aumenta o tempo dispon\u00edvel para qualquer poss\u00edvel invasor realizar uma an\u00e1lise mais profunda em cada est\u00e1gio da comunica\u00e7\u00e3o.<\/p>\n<p>Al\u00e9m disso, o pacote S7 -ACK pode ser explorado para realizar um ataque de nega\u00e7\u00e3o de servi\u00e7o, por meio da exaust\u00e3o de recursos, pois a quantidade de recursos dedicados \u00e0 comunica\u00e7\u00e3o em um PLC \u00e9 limitada.<\/p>\n<p>Uma poss\u00edvel atenua\u00e7\u00e3o seria uma atualiza\u00e7\u00e3o do firmware do PLC para garantir que os PLCs se desconectem de uma sess\u00e3o S7 inativa (uma sess\u00e3o que cont\u00e9m apenas pacotes S7 -ACK) ou depois de n\u00e3o receberem nenhum pacote S7 leg\u00edtimo ap\u00f3s um determinado per\u00edodo de tempo, a menos que o operador configure o PLC de outra forma.<\/p>\n<p><span class=\"subtitulo-nota\">Outras recomenda\u00e7\u00f5es<\/span><\/p>\n<p>A seguir, algumas recomenda\u00e7\u00f5es para manter o PLC protegido contra amea\u00e7as ou, pelo menos, mitigar os riscos, levando em conta o que vimos neste post e em sua primeira parte:<\/p>\n<ul>\n<li>Seguran\u00e7a em primeiro lugar: como os setores consideram a seguran\u00e7a como um fator importante ao projetar, atualizar ou operar qualquer PLC, a seguran\u00e7a deve ser primordial. Isso deve levar em conta o hardware, o software e as redes. As empresas devem desenvolver uma avalia\u00e7\u00e3o de risco, respostas e padroniza\u00e7\u00f5es mais detalhadas antes de implementar qualquer projeto de PLC. Um exemplo pode ser: n\u00e3o considerar uma atualiza\u00e7\u00e3o de firmware de um PLC antigo porque n\u00e3o h\u00e1 parada planejada da linha de produ\u00e7\u00e3o.<\/li>\n<li>A seguran\u00e7a cibern\u00e9tica \u00e9 responsabilidade de todos. Todos os funcion\u00e1rios devem estar sempre atentos e preocupados com a seguran\u00e7a. Os funcion\u00e1rios devem relatar imediatamente qualquer pr\u00e1tica insegura, dispositivo inseguro ou comportamento suspeito.<\/li>\n<li>Fun\u00e7\u00f5es e autentica\u00e7\u00e3o: os privil\u00e9gios de acesso a informa\u00e7\u00f5es e dispositivos devem ser adequadamente restritos e bem considerados antes de serem atribu\u00eddos aos funcion\u00e1rios. Os privil\u00e9gios devem ser bem validados, controlados, registrados e monitorados (use IDs exclusivos ou credenciais de acesso). As atividades n\u00e3o autorizadas ou n\u00e3o monitoradas devem ser evitadas ou, pelo menos, minimizadas. Os usu\u00e1rios devem ter acesso apenas ao seu trabalho e \u00e0s tarefas di\u00e1rias relacionadas. A revis\u00e3o autom\u00e1tica de registros e o monitoramento de usu\u00e1rios tamb\u00e9m podem ajudar.<\/li>\n<li>Revis\u00e3o e compara\u00e7\u00e3o di\u00e1rias: como as empresas est\u00e3o t\u00e3o preocupadas com a seguran\u00e7a antes e durante a opera\u00e7\u00e3o das linhas de produ\u00e7\u00e3o, elas precisam se preocupar mais com a integridade dos arquivos executados nos PLCs e HMIs. Isso deve ser feito usando uma ferramenta de software que compare a l\u00f3gica ladder com o arquivo mestre original confi\u00e1vel antes de iniciar novas linhas de produ\u00e7\u00e3o. Sempre existe a possibilidade de algu\u00e9m sabotar a l\u00f3gica ou criar um malware inativo no c\u00f3digo da l\u00f3gica ladder que n\u00e3o \u00e9 detectado.<\/li>\n<li>Acesso remoto e IoT (Internet das Coisas): deve ser restrito a determinados dispositivos, \u00e1reas ou, \u00e0s vezes, desativado. Se necess\u00e1rio, deve ser ativado apenas por um tempo limitado e usado por pessoal interno treinado a partir de um dispositivo aprovado, monitorado e controlado; todas as comunica\u00e7\u00f5es devem ser filtradas e verificadas. Os sistemas ou dispositivos que n\u00e3o precisam ser conectados a outras redes, inclusive \u00e0 Internet, devem ser adequadamente segregados e isolados para evitar qualquer amea\u00e7a.<\/li>\n<li>As portas USB devem ser fisicamente desativadas nas HMIs (interfaces homem-m\u00e1quina) e em todos os PCs associados. Somente USBs autenticados e aprovados devem poder ser usados pelos administradores. Malwares como o Stuxnet se espalham por uma rede SCADA por meio de dispositivos de armazenamento USB infectados.<\/li>\n<li>Registro do sistema: deve ser gerado e mantido por um per\u00edodo razo\u00e1vel, caso seja necess\u00e1rio se algo der errado.<\/li>\n<li>Auditoria peri\u00f3dica do sistema e testes peri\u00f3dicos de penetra\u00e7\u00e3o.<\/li>\n<li>Detec\u00e7\u00e3o de intrus\u00e3o do sistema: que tamb\u00e9m deve incluir a prote\u00e7\u00e3o &#8220;tradicional&#8221; do per\u00edmetro (por exemplo, antiv\u00edrus, firewalls etc.). Eles devem ser mantidos sempre atualizados e ativados.<\/li>\n<li>Os PLCs em geral devem ser fisicamente robustos e seguros. N\u00e3o se concentre apenas na prote\u00e7\u00e3o de determinados dispositivos de campo. A prote\u00e7\u00e3o de todo o sistema \u00e9 fundamental e obrigat\u00f3ria.<\/li>\n<\/ul>\n<p class=\"cuerpo-nota\"><span class=\"subtitulo-nota\">Conclus\u00e3o<\/span><\/p>\n<p>Nesta s\u00e9rie de postagens, apresentamos uma vis\u00e3o geral dos PLCs: suas linguagens e hardware, bem como uma vis\u00e3o geral das redes industriais associadas a eles, HMIs e DTUs. Resumimos as principais vulnerabilidades dos dispositivos baseados nesses dispositivos e tamb\u00e9m demos exemplos baseados em outras pesquisas sobre como aplicar explora\u00e7\u00f5es a essas vulnerabilidades. Usando o protocolo S7CommPlus, foi demonstrado que um invasor com acesso \u00e0 rede pode enviar pacotes a um PLC, ler um desafio, calcular a resposta e criar verifica\u00e7\u00f5es de integridade nos pacotes subsequentes para manter uma sess\u00e3o v\u00e1lida. Isso permite que um invasor crie pacotes que ser\u00e3o aceitos pelo PLC, por exemplo, para fazer com que um PLC pare, inicie a l\u00f3gica da CPU que tenha sido interrompida anteriormente por um usu\u00e1rio leg\u00edtimo, sequestre uma sess\u00e3o leg\u00edtima existente entre um PLC e o Portal TIA (mostrado para causar um DOS) e, potencialmente, outros problemas, como reprogramar a CPU.<\/p>\n<p>Em compara\u00e7\u00e3o com o artigo de Cheng \u201c<b>The spear to break the security wall of S7CommPlus&#8221; (A lan\u00e7a para quebrar a barreira de seguran\u00e7a do S7CommPlus),\u00a0<\/b>\u201desta pesquisa fornece uma an\u00e1lise mais detalhada que descreve o mecanismo anti-replay do protocolo S7CommPlus, incluindo novas informa\u00e7\u00f5es sobre as duas criptografias de chave sim\u00e9trica envolvidas no bloco de 132 bytes e o HMAC nos pacotes de fun\u00e7\u00f5es.<br \/>\nAl\u00e9m disso, s\u00e3o fornecidos novos conhecimentos sobre a gera\u00e7\u00e3o de bytes anti-replay, incluindo detalhes dos algoritmos usados e como manipular as chaves geradas.<br \/>\nEnquanto isso, os autores desses artigos propuseram uma s\u00e9rie de novas etapas de atenua\u00e7\u00e3o que n\u00e3o haviam sido propostas anteriormente em pesquisas relacionadas. Essas etapas podem ser adotadas para tornar essas explora\u00e7\u00f5es mais dif\u00edceis de serem descobertas e executadas por um invasor determinado, ou seja, adotando uma abordagem de tempo limite para atenuar o potencial DOS e alterando a maneira como o algoritmo de hash \u00e9 implementado para garantir que a manipula\u00e7\u00e3o das fun\u00e7\u00f5es do Portal TIA seja mais dif\u00edcil de ser realizada por um invasor. Assim como ocorre com a pesquisa de seguran\u00e7a cibern\u00e9tica em outros campos, os autores esperam que as informa\u00e7\u00f5es fornecidas sobre a realiza\u00e7\u00e3o dessa varredura de vulnerabilidades forne\u00e7am \u00e0 comunidade de pesquisa uma vis\u00e3o mais profunda sobre a compreens\u00e3o das abordagens dos invasores e estrat\u00e9gias vi\u00e1veis de atenua\u00e7\u00e3o.<\/p>\n<p><span class=\"subtitulo-nota\">Lecturas de Inter\u00e9s:<\/span><\/p>\n<ul>\n<li><a href=\"https:\/\/claroty.com\/team82\/research\/white-papers\/evil-plc-attack-weaponizing-plcs\">https:\/\/claroty.com\/team82\/research\/white-papers\/evil-plc-attack-weaponizing-plcs<\/a><\/li>\n<li>Peter M. D. Scully Mark J. Neal \u201cPositional: A Collaborative Host-based Architecture for Securing Industrial Networks\u201d Department of Computer Science, Aberystwyth University, Wales, United Kingdom<\/li>\n<li>Yong Wang, Jinyong Liu, Can Yang, Lin Zhou, Shuangfei Li, Zhaoyan Xu \u201cAccess Control Attacks on PLC Vulnerabilities\u201dDepartment of Information Security, Shanghai University of Electric Power, Shanghai, China &amp; Palo Alto Networks, California, CA, USA<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=93lyRgZYxKw\">https:\/\/www.youtube.com\/watch?v=93lyRgZYxKw<\/a><\/li>\n<li><a href=\"https:\/\/youtu.be\/ocOEiNp-8K0\">https:\/\/youtu.be\/ocOEiNp-8K0<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"referencias-nota-title\">\n<h5>REFER\u00caNCIAS<\/h5>\n<\/div>\n<div>\n<p>\u2981 KNERLER, Kathryn; PARKER, Ingrid; ZIMMERMAN,<br \/>\nCarson. 11 Estrategias de un Centro de<br \/>\nOperaciones de Ciberseguridad de Clase Mundial.<br \/>\nFecha de publicaci\u00f3n: 31 de marzo.<br \/>\na partir de 2022.Inglete. Disponible en:<br \/>\n<a href=\"https:\/\/www.mitre.org\/news-insights\/publication\/11-strategies-world-class-cybersecurity-operations-center\">https:\/\/www.mitre.org\/news..<\/a><br \/>\nConsultado el: 23 de marzo.2023.<\/p>\n<p>\u2981 PROFESIONALES CON EXPERIENCIA EN<br \/>\nCIBERSEGURIDAD (SCSP).<br \/>\nCasos de uso SIEM. Fecha<br \/>\nde publicaci\u00f3n: 14 de febrero.<br \/>\na partir de 2020.Github SCSP.<br \/>\nDisponible en:\u00a0<a href=\"https:\/\/github.com\/scspcommunity\/Cyber-Sec-Resources\/tree\/master\/Misc%20Content%20By%20SCSP\">https:\/\/github.com\/scspcommunity..<\/a>.<br \/>\nConsultado el: 23 de marzo. 2023.<\/p>\n<p>\u2981 ALV\u00c9S, Felipe.<br \/>\n\u00bfPor qu\u00e9 usar datos de<br \/>\nflujo para el monitoreo?<br \/>\nFecha de publicaci\u00f3n: 3 de febrero.<br \/>\na partir de 2023.Investigaci\u00f3n<br \/>\nde seguridad base 4.<br \/>\nDisponible en:\u00a0<a href=\"https:\/\/www.base4sec.com\/research\/pt\/dados-fluxo-para-monitoramento\/\">https:\/\/www.base4sec.com\/research..<\/a><br \/>\nConsultado el 23 de marzo. 2023.<\/p>\n<p>\u2981 ALV\u00c9S, Felipe.<br \/>\nTransmitir datos en servidores.<br \/>\nFecha de publicaci\u00f3n: 18 de marzo.<br \/>\na partir de 2023.<br \/>\nInvestigaci\u00f3n de seguridad base 4.<br \/>\nDisponible en:\u00a0<a href=\"https:\/\/www.base4sec.com\/research\/pt\/Netflow-Export\/\">https:\/\/www.base4sec.com\/research<\/a><br \/>\nConsultado el 23 de marzo. 2023.<\/p>\n<p>\u2981 MITRE, 11 Strategies<br \/>\nof a world-class cybersecurity<br \/>\noperations center.<br \/>\nFecha de publicaci\u00f3n:<br \/>\nAbril 2022.<br \/>\nDisponible en:\u00a0<a href=\"https:\/\/www.mitre.org\/sites\/default\/files\/2022-04\/11-strategies-of-a-world-class-cybersecurity-operations-center.pdf\">https:\/\/www.mitre.org\/sites\/..<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>H\u00e1 uma semana, na primeira parte desta postagem, pudemos ter uma vis\u00e3o geral dos PLCs (linguagem e hardware) e algumas vulnerabilidades, bem como uma vis\u00e3o geral das redes industriais associadas, dispositivos de campo, HMIs e DTUs. Agora que j\u00e1 assimilamos esses conceitos sobre redes industriais e seus elementos associados, vamos entrar em detalhes sobre como [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":5112,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"footnotes":""},"categories":[260],"tags":[],"class_list":["post-5154","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technical-pt-br"],"jetpack_featured_media_url":"https:\/\/base4sec.com\/wp-content\/uploads\/2024\/12\/blog_39.png","_links":{"self":[{"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/posts\/5154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/comments?post=5154"}],"version-history":[{"count":2,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/posts\/5154\/revisions"}],"predecessor-version":[{"id":6228,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/posts\/5154\/revisions\/6228"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/media\/5112"}],"wp:attachment":[{"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/media?parent=5154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/categories?post=5154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/base4sec.com\/pt-br\/wp-json\/wp\/v2\/tags?post=5154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}