Uma biblioteca Python maliciosa pode alterar a forma como um modelo de IA responde a uma pergunta sem tocar em um único arquivo em disco, e as ferramentas de segurança habituais podem nunca perceber que isso aconteceu. A Stealthium, empresa de segurança, reproduziu esse tipo de ataque em seu laboratório e mostrou como seu sensor de tempo de execução detectou a adulteração ao associar a atividade da GPU ao código Python que a disparou.
A técnica é chamada de Edição de Modelo de Posto Um, ou ataque ROME. Ela faz uma pequena correção direcionada em uma matriz de pesos de uma camada intermediária de um modelo. Os pesos são o grande conjunto de números que determina como um modelo responde, então alterar alguns deles pode mudar o que o modelo diz. Os pesquisadores Kevin Meng e colegas apresentaram o método em 2022. A Mithril Security o utilizou em sua demonstração PoisonGPT, em 2023.
O teste da Stealthium usou um pequeno transformador PyTorch, algumas perguntas e respostas e um checkpoint armazenado em disco. Nada no modelo ou em seus pesos foi especialmente elaborado. O mesmo comando fez a mesma pergunta duas vezes e obteve duas respostas com significados fundamentalmente diferentes, e não as pequenas mudanças de redação que se poderia esperar ao ajustar a configuração de temperatura de um modelo.
Como um código malicioso pode alterar um modelo de IA sem tocar em seus arquivos?
O checkpoint não mudou entre as execuções, e nenhum arquivo de respostas foi trocado. Em vez disso, uma biblioteca maliciosa importada se injetou no PyTorch. Na demonstração, ela foi configurada com uma variável de ambiente ROME e aplicou a edição dos pesos quando o modelo foi colocado no modo de avaliação.
Por que o ataque quase não deixa rastros
De acordo com a Stealthium, um ataque ROME se parece com uma inferência padrão somada a um lote de lançamentos extras de kernels CUDA. Um lançamento CUDA é uma solicitação da CPU para que a GPU execute um kernel, um pequeno programa que realiza trabalho paralelo sobre os dados da GPU.
Os pesos são corrigidos diretamente na memória da GPU. Não há acesso a arquivos, nenhuma chamada de sistema extra e nem mesmo um arquivo mapeado em memória. A edição é um trabalho CUDA comum emitido pelo mesmo processo python3, no mesmo contexto. Ferramentas que monitoram arquivos, sockets de rede ou o driver da GPU veem o que parece ser uma tarefa de inferência normal.
Essa lacuna é importante porque a maioria das ferramentas de detecção e resposta em endpoints foi criada para monitorar o comportamento de processos, como abrir arquivos, criar processos filhos e estabelecer conexões de rede. Um ataque ROME não faz nada disso. A Stealthium descreveu o ataque como algo que nunca sai da GPU. A biblioteca maliciosa pede à GPU que faça um pouco de cálculo extra e grave os resultados sobre alguns dos números do modelo, repetindo o processo milhares de vezes enquanto o modelo responde a uma pergunta.
O que o sensor de tempo de execução registrou
O sensor de tempo de execução da Stealthium registra carregamentos de bibliotecas CUDA e lançamentos de kernels. Quando esse trabalho vem do Python, os eventos incluem a pilha de chamadas do código Python. Na execução do ataque ROME, os kernels de inferência pareciam os mesmos, quer o modelo estivesse respondendo a um prompt casual, quer estivesse executando uma edição. A diferença estava na pilha de chamadas.
Como a Stealthium detectou a edição dos pesos?
O sensor também captou kernels que uma execução limpa nunca lança. Alguns estavam associados a um arquivo chamado calibration.py, que rodava dentro da função _calibrate. Outros calcularam os pesos-alvo, e um conjunto final gravou esses valores nos pesos ativos do modelo, na memória da GPU. A Stealthium identificou duas anomalias: um chamador incomum e kernels que uma execução normal não produziria. O alerta direcionou os responsáveis para o caminho específico do código.
A plataforma da Stealthium também monitora importações Python e chamadas de execução em tempo de execução, como exec, eval e compile. Segundo a empresa, ela não instrumenta todas as possíveis alterações de monkey-patch em Python, porque isso poderia gerar sobrecarga significativa e alertas excessivos para comportamentos benignos da biblioteca padrão. Em vez disso, ela anexa a pilha de chamadas Python às atividades CUDA e às chamadas de sistema diretas.
O contexto dos eventos deixou o quadro mais claro. Junto com a gravação de pesos feita por calibration.py, o registro mostrou que o processo havia lido o checkpoint do modelo, importado o módulo de calibração, aberto os arquivos de dispositivo da GPU, resolvido um nome de domínio e mantido uma sessão HTTPS com huggingface.co.
Detectando a própria alteração dos pesos
Os dados em nível de kernel não conseguem dizer qual tensor do modelo foi alterado. Os argumentos dos kernels são ponteiros brutos de dispositivo, e o mesmo kernel que soma dois tensores durante um prompt também pode somar uma correção a uma matriz de pesos. Para responder a essa questão, a Stealthium pesquisa sinais em nível de framework. O objetivo é capturar a pilha de chamadas Python no momento em que o PyTorch registra uma alteração in-place em um tensor.
Carregar um modelo e editar um modelo incrementam o contador de versão por tensor do framework, e ambos aparecem como a mesma ação tensor_write. A diferença está na pilha de chamadas. Em um carregamento normal, a pilha passa por torch.load e load_state_dict. Na demonstração do ROME, a escrita remontava a uma passagem de inferência em calibration.py, um arquivo que não tem motivo para modificar pesos. A Stealthium afirmou que essa visão em nível de framework e sua visão em nível de kernel apontaram para a mesma função _calibrate.
A Stealthium afirmou que o experimento demonstra tanto o valor quanto os limites da visibilidade em tempo de execução sobre a GPU. Separar o carregamento legítimo de um modelo de uma edição posterior continua sendo um desafio, e a empresa disse que segue trabalhando nesse problema.
Dieser Artikel wurde mit Unterstützung von KI verfasst.
News Factory APP - agentische News für besseres SEO & AEO.