Como sempre, sem nomes, e como também estou associado a uma assinatura de não divulgação, ela também possui um histórico ligeiramente modificado (e omitindo alguns detalhes cuja publicação não recebi permissão).
A seguir, é apresentada a história real de um funcionário invadindo um computador ... digamos, algum banco privado. Os eventos que seu humilde servo narra ocorreram em algum país europeu não muito tempo atrás, antes do DSGVO (GDPR, RGPD), mas no processo de se tornar um, em antecipação aos chamados.
Na verdade, tudo começou com uma auditoria de segurança - ..., uma entrevista, olhando sob a lupa de tudo e de tudo, pesquisando e descobrindo possíveis brechas e gargalos a serem percorridos (tanto de lá quanto de lá), ... e, na verdade, o interrogatório. Em que o cliente recebeu no final uma conclusão decepcionante para ele - "grau C com um alongamento".
Vamos omitir as palavras que os funcionários de segurança de TI estavam corando diante de seus olhos, mas a mensagem lírica geral é que estou lançando acusações infundadas, e eles têm tudo bloqueado, e a chave CSO está no meu bolso, debaixo do meu coração.
Tentativas de explicar que o sistema de segurança é construído em torno de firewall + proxy + máquina de lavar da Web, como filtro de conteúdo e antivírus, sem nenhum IDS híbrido muito mal configurado (HIDS + APIDS), honepots etc. etc., em primeiro lugar, por definição, não é seguro; em segundo lugar, por assim dizer, já mostrei vários lugares onde pelo menos não é comme il faut. Tentativas de retorno a um diálogo construtivo (na verdade, de volta à análise) foram esmagadas contra uma parede de ressentimento de três andares construída por todo o departamento.
Ao diminuir a reunião e liberar os funcionários, a CSO, juntamente com dois chefes importantes, tentou, honestamente, descobrir de mim onde o cachorro remexia e entendia como viver mais de fato e o que exatamente, na minha humilde opinião, precisa ser feito.
Porque Um vislumbre de entendimento também não foi observado no futuro, com entusiasmo encontrei uma proposta para mostrar na prática. Depois de explicar que, no momento, não dá certo, estabelecendo formalidades (assinando mais alguns papéis etc.), recebi a aprovação.
Eu realmente não gosto do fato de trabalhar “às cegas” (é uma tarefa árdua, longa e cara, e pentesting é uma questão de sorte) e forneça algumas informações adicionais (por exemplo, alguns dados pessoais de funcionários individuais, como desenvolvedores e equipe de segurança ), Também não encontrei um contra-entendimento.
Você é um hacker ou não ?! (Na verdade, não, sou desenvolvedor, caso contrário, é mais um hobby).
Não vou me aprofundar em discussões por um longo tempo - como sempre, convenci o fator dinheiro e tempo (ou seja, na verdade o mesmo dinheiro).
I.e. Como resultado, temos algum tipo de conhecimento sobre a estrutura de defesa da empresa (obtida como resultado de uma auditoria preliminar), além de um nome completo e uma breve biografia de 4 administradores e 3 desenvolvedores.
Por que os administradores e desenvolvedores são adequados, afinal, alguém poderia pedir “contadoras de garotas”, enviar algum tipo de “gato” com algum animal muito menos seguro anexado (ou criar algo semelhante no campo da engenharia social) . Mas ...
No entanto, muitas empresas, em regra, não gostam muito quando começam a falar sobre isso na apresentação do PoC , ou seja, O "sistema de hackers" baseado em intrigas do campo da engenharia social não é pelo menos bem-vindo, não importa quão brilhantemente tenha sido construído.
Voltando aos técnicos, eles são, em primeiro lugar, não menos "sociais" (o que não significa que lançarão algum tipo de "gato", mas o fato em si é importante) e, em segundo lugar, eles geralmente têm um computador mais "funcionalmente desenvolvido" ( que você simplesmente não encontrará). E o mais interessante, além disso, eles costumam ter algum tipo de "privilégio", ao contrário da mesma contadora, ou seja, eles podem ser menos violados em termos de segurança e restrições do sistema (como políticas e co - é necessário, por exemplo, executar um exe-shnik recém-compilado de alguma forma) e / ou podem escalar um “muro” construído por guardas de segurança (por exemplo, forçando um túnel através de um proxy) etc. etc.
Novamente, rastrear a proteção, usando o programador de computador ou o administrador ao mesmo tempo, parece completamente diferente do que, por exemplo, "forçar" o trojan do contador a executar.
I.e. recebido inicial, tarefas dubladas - vamos ...
O primeiro passo é coletar informações sobre "clientes" - quem, o que, onde, quando.
Não vou ficar muito distraído aqui, o artigo não é inteiramente sobre isso, então vou apenas dizer - decidi por um cara bem social, com o Facebook e companhia, incluindo seu próprio canal no youtube (YouTube, Vasya!), Vários projetos de código aberto (tanto no grupo quanto e próprio) e apenas uma atividade de contribuição gigante (pergunta, mas ele geralmente trabalha no local principal) .
Descobrir hoo-hoo hoje geralmente não é um problema (em algum lugar eu usei meu nome real em um lugar com um apelido, em algum lugar consegui um endereço IP de proxy da empresa e a imagem foi formada), mas ninguém realmente se esconde.
Fui forçado a desacelerar, incluindo meu talento natural o fato de que em uma comunidade nosso herói estava envolvido em um suporte mais ou menos ativo no bate-papo e no uso do cliente IRC, que nas informações do usuário fornecidas além do IP, de onde as pernas crescem, o nome e a versão de si mesmo amavam, bem, isso era famoso bugs / buracos e, por padrão, foi envolvido por plugins quanto em vão.
Bem, como sempre, uma noite, a casa adormeceu, uma escória na caixa, a nossa perde de novo :) nesse bate-papo, encontrei um apelido conhecido como usuário ativo com uma conexão superior a 12 horas (a julgar pelo log com desconexões / reconexões intermediárias, porque um proxy corporativo é uma coisa dessas, mas mais de meio dia desde a primeira conexão), do endereço IP necessário isto é com um login no formato max.mustermann@proxyext.our-company.example.com
.
Ou seja, nosso cliente tem um dia - 24 horas, ou mais provável (porque duas horas se passaram desde sua última mensagem), ele simplesmente não desligou o computador em funcionamento e deixou o cliente de IRC ativo.
Ou talvez ele tenha colocado o computador em modo de suspensão, mas (novamente, o erro de segurança ou administradores) acontece que o último se acorda, por exemplo, para atualizar atualizações para o Windows (e após uma pausa de 4 horas para reiniciar) ou simplesmente capturar estupidamente um sinal de ativação na LAN. .
Seja como for, tive algum tempo para dar um tapinha no computador, ou melhor, no cliente de IRC de nossa “vítima”.
Não encontrar um único buraco conhecido nesta versão específica (aliás relevante naquele momento) do cliente de IRC, armada com uma ida, ollydbg etc. e olhando para a fonte (horror silencioso, Vasya!), ele começou a procurar algum tipo de vulnerabilidade que lhe permitisse pelo menos executar algo lá, com o objetivo de controlar remotamente pelo menos o cliente de IRC (e nos lembramos dos plugins).
E foi encontrado, mesmo que relativamente rápido!
A interceptação do controle permitiu a chamada insegura do sprintf
para o buffer da pilha com %s
dentro da entrada estrangeira mal filtrada (em conjunto com a injeção de codificação), que permite gravar o "carregador de código de exploração" na pilha no lugar certo (graças aos desenvolvedores do cliente pelo código, Microsoft para pilha de terras baixas e sorte).
Embora o tormento ainda precisasse - porque temos DEP, você não pode executar diretamente da pilha, é necessário escrever uma cópia do "código do programa" na pilha para execução, encontrar a chamada de memcpy
com ret
no final para copiar para o lugar certo (reescrever a classe menos usada), redirecionar a saída de vários procedimentos para o lugar certo, sobrescreva vários valores VTABLE para gerar um evento chamando o próximo método virtual que causa algum código python como um plug-in (e altere esse código python por conta própria, como um carregador de mensagens quebradas, a fim de já montar um arquivo pronto ployt-kit).
Ah, sim, você ainda precisava criar um plug-in (obrigado novamente aos desenvolvedores do cliente por uma funcionalidade tão generosa), como um proxy, alterando mensagens instantaneamente (adicionando um invólucro para iniciar uma injeção, quebrando a codificação, enquanto inseria substitutos incompletos no lugar certo, e t etc.), codifique o carregador inicial da mensagem de injeção etc.
Além disso, tive que criar um pequeno script python como um novo plug-in de cliente para o sistema de destino como um emulador de console (recebendo minhas mensagens em seu stdin e enviando stdout + stderr em uma mensagem privada de volta ao meu apelido).
Tendo recolhido tudo isso de joelhos, ele lançou o cliente do IRC para tentar se fazer de vítima, ou seja, veja como ficará em sua forma completa e finalizada.
E enviando através do meu plug-in de outra sessão da segunda versão lançada do aplicativo, várias injeções de mensagens privadas, fiquei encantado ao ver a saudação usual do Python >>>
(que eu prendi no emulador, por uma questão de clareza - o python).
Satisfeito como um elefante (observando que o aplicativo atacado não caiu), ele viu o que estava acontecendo em sua janela de saída de mensagens - estava cheia de vários caracteres não-ascii, o mais notável dos quais era
com o número de série 90h (que pelo menos não é uma ilusão, é uma tentativa de invasão), pensei que ainda precisava refazer o gerenciador de inicialização para mascarar as seguintes mensagens (de repente, ainda funciona e aviso).
Ele olhou o código e, lá estavam eles esperando a linha NTS na saída, decidiu não se incomodar e reescrever estupidamente o primeiro byte da mensagem após carregar zero (com a esperança de que a mensagem seja exibida na tela um pouco mais tarde).
Repetir todo o processo e aguardar o >>>
desejado novamente olhou para outra janela e descobriu que não havia nada supérfluo no bate-papo (Eu ainda sou um gênio) , decidiu continuar o teste.
A mensagem from glob import glob as ls; ls('*')
from glob import glob as ls; ls('*')
e vi com alegria a resposta como uma lista de pastas e arquivos contidos na pasta do aplicativo.
É verdade que vi a mesma mensagem na janela do cliente atacante que foi enviada ao meu apelido. Eu também tive que colocar 0 byte (NTS) no início da linha depois de enviá-lo para mim.
Tendo terminado assim com a fase preparatória, ele observou que nosso amigo experimental ainda estava conversando (sem mensagens, Vasya!). Ele já havia preparado uma façanha para o nosso candidato.
Vamos lá ...
As mensagens de injeção sumiram ... E depois de alguns segundos (aparentemente o disco estava dormindo ou o proxy estava burro), vi novamente o convidativo >>>
.
Enquanto pulava pela sala, ainda não sabia (que o espetáculo não é para os fracos de coração, porque como resultado de um processo descontrolado de manifestação de alegria, ainda enfiei meus pezinhos na perna da cadeira).
Estremecendo de dor e pensando imediatamente: “e se algo não estiver visível em sua janela de recolhimento, de repente eu estraguei tudo em algum lugar e o aplicativo travou como resultado”, lembrou-se de uma possível reinicialização forçada após a atualização (se de repente o computador acordou disso e já rolou a atualização), suando frio (olhando para o dedinho inchado e removendo as mãos trêmulas), acelerei.
O primeiro passo é verificar se estamos lá.
>>> import os; os.environ['userdomain']
e a resposta é:
'OUR-COMPANY' >>>
Bem, tudo, as mãos estão desamarradas ... Vamos.
Depois de verificar com um pequeno script que o logonui está bloqueado, depois de me acalmar um pouco, decidi ver o que está disponível no computador em geral:
>>> from glob import glob as ls; ls(r'C:\Program Files\*')
e na resposta, não acreditando na sorte dele, entre muitas coisas interessantes, vi o seguinte:
[...,'C:\\Program Files\\TeamViewer',...] >>>
I.e. não é necessário fazer gestos extras - você não precisa baixar nada, compilar e procurar uma pasta na qual possa escrever tudo sem violar nenhuma política.
E, nesse meio tempo, voou:
>>> import subprocess; subprocess.call([r'C:\Program Files\TeamViewer\TeamViewer.exe'])
Bem, após a resposta de retorno:
0 >>>
Depois de esperar um pouco para o TeamViewer passar pelo proxy e o servidor fornecer um ID (com senha), executei um script lá, procurando a janela do TeamViewer, tirando uma captura de tela e enviando de volta para mim na forma de uma linha base64, na qual, expandindo-a de volta para bitmap, tive o prazer de encontrar o ID e a senha da conexão.
...
Na manhã seguinte, fui chamado por um CSO surpreso, que primeiro recebeu uma carta minha (mas por algum motivo veio da conta interna do Exchange de seu funcionário) e, em seguida, uma ligação assustada do mesmo funcionário com as palavras "Chef, nós a perdemos - eles nos quebraram", que encontrou uma janela aberta pela manhã Palavra com um texto grande dentro de "Dois para sua segurança. Você foi hackeado!", Data, assinatura.
Depois disso, a comunicação com os seguranças já era mais proveitosa, sem spray de saliva, rasgando camisas e gritos. Ensinado por experiência amarga ( por exemplo, como descrito neste artigo ), tentei adiar o rompimento mais tarde (porque no início eu queria receber uma ordem de pagamento por um novo "conceito de segurança"), mas depois de muita persuasão, dicas de cooperação a longo prazo etc. n., além de promessas da parte deles de "não tocar" o funcionário culpado (colega afinal de contas), eles tiveram que apresentar quase todos os pontos principais.
Então recebi a recompensa negociada por hackers (assim como o custo da auditoria preliminar) completamente, mas o escritório se comportou ... digamos, não é exatamente um esporte. Para continuar o show, eles contrataram uma empresa de auditoria proeminente e conhecida, que basicamente se recusou a trabalhar com externos em meu nome.
Bem, então, como dizem na Alemanha, "Man sieht sich immer zweimal im Leben", que significa "Certifique-se de encontrar-se novamente".