Chrome apenas nos fornece os cookies. Isso ignora toda a senha do Chrome Safe Storage, porque o próprio Chrome descriptografa os cookies.
Roubando cookies do Chrome sem uma senha
Se você roubar os cookies do Chrome de alguém, poderá fazer login em suas contas em todos os websites em que eles estiverem conectados.
Normalmente você precisa da senha do usuário para fazê-lo, mas eu encontrei uma maneira de fazer isso sem a senha. Você só precisa ser capaz de executar código em seu computador. Ele funciona usando o Protocolo de Depuração Remota do Chrome.
Se você quer pular este post idiota e pegar o código demo, aqui vai: https://github.com/defaultnamehere/cookie_crimes . Não gaste tudo de uma vez.
Para saber como ele funciona e como eu o encontrei, você só precisa encontrar dentro de si a força para rolar essa página .
Passo 0: Reconsidere suas escolhas de vida
Imagine que, por algum motivo , você tenha hackeado o computador de alguém. Eu não sei, talvez você é como um espião ou algo assim?
Vamos chamar sua vítima fictícia, "Naruto".
Especificamente, você tem a capacidade de executar código no computador de Naruto. Isso é como, provavelmente, hackear, e você já vai ser golpeado no reino das sombras por seus crimes, então você pode fazer mais alguns.
Um crime óbvio que você pode querer fazer com esse acesso é roubar os cookies do Chrome do Naruto. Isso permitiria que você fizesse login como ele em qualquer coisa que ele estivesse logado. Oooooh sim definitivamente. Imagine o problema que você poderia ter com isso .
Como os cookies funcionam?
Você sabe como não precisa fazer login toda vez que acessa o Facebook? Como quando você vai para
facebook.com
ele só mostra sua linha do tempo? Como o Facebook sabe que é você?
É porque quando você faz login no Facebook, o Facebook oferece um cookie, que fica no seu computador. Da próxima vez que você for ao Facebook, basta mostrar esse cookie e deixá- lo entrar sem ter que digitar sua senha novamente.
É como aquelas pulseiras que eles dão no clube para mostrar que você está bebendo, exceto que eu não tenho certeza se eles ainda fazem isso porque eu não fui a um evento desde o lançamento do Stardew Valley.
E se alguém fosse ... olhar para os lados roubaros cookies?
Por exemplo, se você tivesse os cookies do Facebook de Naruto, não importa se ele tem uma senha realmente boa, 2 Autenticação de Fator, ou se é particularmente um bom companheiro com zucc e os garotos.
Você pode simplesmente colocar cookies Facebook de Naruto em você próprio navegador e vá para
facebook.com
, e você verá de Naruto conta no Facebook logado.
É tão fácil quanto isso.
Segurança de cookies do Chrome
Vamos supor que Naruto, o sujeito absoluto, tenha o OS X - mas isso também funciona no Windows e no Linux.
Os deliciosos e saborosos cookies Chrome de Naruto vivem em um arquivo em seu computador. De maneira inteligente, o Chrome criptografa seus cookies com sua própria senha "Chrome Safe Storage". Essa senha mora no Keychain de Login do Naruto, então a única maneira de obter os cookies é desbloquear o chaveiro digitando sua senha.
Essa é uma maneira perfeitamente legítima de pegar os cookies de alguém, mas a razão pela qual estamos aqui hoje é que tenho certeza que encontrei uma maneira de pular tudo isso.
Por que deveríamos decifrar os cookies? Afinal, Naruto pode obter seus próprios cookies do Chrome sem digitar sua senha. Certamente há uma maneira de obter o Chrome para nos dar os cookies, se pedirmos gentilmente?
Etapa 1: execute o Chrome sem cabeça
O Chrome pode ser executado no modo sem cabeça agora. Isso significa que ele pode ser executado sem realmente ter uma janela exibida. Tudo acontece no terminal. Isso é profundamente poderoso e, provavelmente, tudo vai dar errado algum dia.
Diretórios de dados do usuário
O Chrome armazena seus cookies, histórico, segredos mais profundos, etc. em um
user-data-dir
. Por padrão (se você não tiver nenhum perfil do Chrome ), isso será $HOME/Library/Application Support/Google/Chrome/
.
Escusado será dizer que este diretório é The Good Stuff, e nós queremos estar extremamente lá.
Ativando a Depuração Remota
Como vivemos em um futuro distópico, o Chrome permite que você o controle remotamente por motivos de depuração e automação.
Vamos configurar uma janela do Chrome sem cabeçalho, usando o mesmo
user-data-dir
que a nossa vítima.
Isso aparentemente não é possível de acordo com o Google.
"Duas instâncias do Google Chrome em execução não podem compartilhar o mesmo diretório de dados do usuário"
O que, você não vai tentar só porque uma página web te disse para não? Claro que estamos.
Aqui está o que executar:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--headless \
--user-data-dir="$HOME/Library/Application Support/Google/Chrome/" \
https://gmail.com \
--remote-debugging-port=9222
Isso define a depuração remota em escuta
localhost:9222
(a porta padrão para a depuração remota do Chrome, agora que é stealth). Também não irá abrir uma janela do navegador. Precisamos informar ao Google Chrome sem cabeça algo para que possamos abrir uma guia e começar a depurá-la. Você pode substituir gmail.com
com qualquer coisa que você gosta.
Neste ponto, você pode ver qualquer página como se Naruto a abrisse em uma nova aba (e assim, veja todas as suas mensagens no Facebook, no nosso exemplo). Você pode fazer isso adicionando
--dump-dom
ao comando acima, que irá imprimir o HTML da página que você pede ( gmail.com
acima). Mas isso parece um pouco entediante, não muito furtivo, e podemos fazer melhor do que isso se apenas acreditarmos .
Normalmente, você deve gostar, abrir um segundo Chrome, apontá-lo no primeiro Chrome e usá-lo para depurar o próprio Chrome. Ya não vamos fazer isso. Nós vamos depurar remotamente o Chrome com
curl
.
Vamos lá, não aja assim não é absolutamente selvagem . Existem algumas coisas que os seres humanos nunca quiseram fazer.
Etapa 2: depurar remotamente o Headless Chrome
Através de googling furioso e intenso, eu aprendi que poderia ser possível obter cookies do Chrome, depurando-o remotamente. Então, parti para aprender como funciona a depuração remota do Chrome.
Basicamente, essa porta de depuração remota (
localhost:9222
) está esperando que você fale algum protocolo websocket janky, no qual você pode emitir comandos para o Chrome. Se você souber como dizer o comando, o Chrome será apenas…. faça.Sidenote: as ferramentas de desenvolvimento do Chrome são absolutamente frouxas
Quando eu estava tentando descobrir se isso era possível, me deparei com esta página: https://chromedevtools.github.io/devtools-protocol/
Esta é uma documentação do Protocolo usado pelas Ferramentas do desenvolvedor do Google Chrome (
Right Click > Inspect Element
, nosso amigo e aliado de confiança). Presumivelmente, nesta página, algumas pessoas legais do Google explicarão gentilmente a mim, um estranho, como usar sua magia antiga e poderosa.
Eles dizem "ei, se você quiser depurar remotamente o Chrome, precisa falar sobre o Protocolo de Depuração Remota". Estou pronto para esta página me ensinar como depurar remotamente o Chrome, mas diz "nós não liberamos isso tipo de informação para punks como você ”.
Eles casualmente lhe dizem para farejar e fazer engenharia reversa do protocolo, se você quiser saber como funciona, já que o único cliente que fala é o próprio Chrome Dev Tools. A maneira como eles dizem para você verificar é usar as Ferramentas de desenvolvimento do Chrome para depurar as FERRAMENTAS DO CHROME DEV THEMEELVES e exibir os dados do websocket que o primeiro conjunto de ferramentas do Chrome Dev Tools está enviando. A facilidade com que eles sugerem essa solução é bastante estressante.
Finalmente, eles têm uma seção chamada "Como o protocolo é definido?", Que tem dois links para os arquivos json que você deveria ler, sendo que ambos são 404.
Como diabos a Depuração Remota funciona?
De acordo com o Documento Amaldiçoado mencionado acima, há um
/json
terminal secreto, mal documentado, na porta de depuração remota. Vamos ver isso.
Em uma nova janela de terminal, execute
$ curl -s localhost:9222/json
[ {
"description": "",
"devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/7404BF41DC4E7512E0431577BABCE18A",
"id": "7404BF41DC4E7512E0431577BABCE18A",
"title": "about:blank",
"type": "page",
"url": "about:blank",
"webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/7404BF41DC4E7512E0431577BABCE18A"
} ]
Veja isso
webSocketDebuggerUrl
? É o que nós queremos.Etapa 3: Emita o comando sobre o protocolo do websocket
Com a URL mágica que obtivemos na etapa anterior, agora podemos falar o idioma antigo para controlar o Chrome.
Primeiro, precisamos de algo que possa falar a linguagem do websocket. Você pode usar qualquer coisa, mas eu pesquisei por alguma ferramenta chamada
wsc
. Na prova de conceito (que fiz apenas para você), tudo é feito em Python, então você não precisa disso.Falar a língua antiga
Pronto? Vamos fazer isso
Usando
wsc
:wsc ws://localhost:9222/devtools/page/7404BF41DC4E7512E0431577BABCE18A
Connected to ws://localhost:9222/devtools/page/7404BF41DC4E7512E0431577BABCE18A
>
Oooh Parece um prompt de comando. Se soubéssemos o que digitar aqui, poderíamos dizer ao Chrome o que fazer.
Eu vou te salvar as 50 abas do Chrome aberto, a leitura do Ruby de 2012 no GitHub, e a descoberta do próprio relatório de bug que criou esse recurso e apenas mostrar o comando.
>{"id": 1, "method": "Network.getAllCookies"}
[{
"domain": "mail.google.com",
"expires": -1,
"httpOnly": false,
"name": "GMAIL_AT",
"path": "/mail/u/0",
"secure": true,
"session": true,
"size": 42,
"value": <unencrypted cookie value appears here>
},
...<the rest of the cookies>
Porque perguntamos muito bem, o Chrome apenas nos fornece os cookies. Isso ignora toda a senha do Chrome Safe Storage, porque o próprio Chrome descriptografa os cookies.
E fizemos tudo sem precisar ser o usuário root, ou de outra forma saber a senha do Naruto.
Você pode conectar esses cookies a uma extensão do Google Chrome (por exemplo, EditThisCookie ) e você fará login no Gmail do Naruto se acessar
mail.google.com
o navegador.
Aaaaa e é isso. Crimes bem sucedidos. Dirigido por Quentin Tarantino.
Se você quiser tentar isso em casa, aqui está o código para fazer isso para você: https://github.com/defaultnamehere/cookie_crimes . Se você quiser tentar usá-lo em outra pessoa, talvez este seja o site para você .
Prevenção
Se você não quiser que esse ataque seja usado contra você, recomendo sinceramente não permitir que alguém execute código no seu computador.
A melhor prática padrão do setor é a aquisição rápida de amuletos abençoados, cristais misteriosos de origem desconhecida, mas certamente de origem picante, e / ou esquemas de extorsão de pagamento conforme o uso para evitar a execução de código acima mencionada.
Na falta disso, acho que também tem:
Cookies de vinculação de canal
Os bons amigos on-line criaram uma maneira de tornar mais difícil roubar os cookies. Ele é chamado de Cookies Vinculados ao Canal . Isso permite que os sites solicitem que você prove que possui uma chave especial de ligação de token antes de poder usar cookies nesse site. Isso significa que, se você quiser usar os cookies que roubou da máquina de alguém, também precisará roubar sua Chave de Ligação de Token e usá-la para representar seu navegador.
Esse recurso está no Google Chrome , mas está desabilitado por padrão e será removido se eu tiver entendido a discussão acalorada nesse tópico . O recurso também está no Edge (que é o que o Internet Explorer é chamado agora, postar crise de identidade).
Mesmo que o Chrome o use, a maioria dos websites não usa o Channel-binding. Isso porque, bem, não é muito prejudicial para o site se os cookies de Naruto forem usados por outra pessoa. Isso é mais problema de Naruto, em seus olhos.
Detecção
Em teoria, as pessoas podem detectar o roubo de cookies. O Google, por exemplo, sabe que eles deram o cookie do Gmail acima para o Naruto. Eles também podem saber que você, com um navegador, sistema operacional e endereço IP diferentes, pode não ser o Naruto. Eles também podem detectar seus erros de vinculação de canal. Mas ei, eu não vi essa técnica falhar por causa disso até agora.
Perguntas frequentes
Espere então você já deve estar executando o código no computador de alguém para que isso funcione? Isso não é nada demais!
Quero dizer, sim, você está certo. Não é um grande negócio. Ninguém entra em pânico. Todo mundo fica legal. Os tipos de pessoas que estão roubando os cookies do navegador das pessoas vão ter mais facilidade, já que não há mais descodificação.
Por que isso é bom mesmo?
- Você não precisa saber a senha de alguém para fazer isso (ao contrário de outros métodos)
- É simples ( um comando para executar)
Tenho certeza de que esta é a melhor maneira de obter cookies do Google Chrome quando você estiver no computador de alguém. Eu certamente não me importaria com nenhum outro método.
Você vai dizer ao Google sobre essa falha crítica de segurança?
Não, eles sabem disso. É um recurso do Chrome, afinal. Eu até os vi decidindo adicioná-lo .
UPDATE: Eu disse a eles sobre isso juuuuuust no caso.
Eu tenho que dizer que isso está funcionando como pretendido. O protocolo de depuração remota destina-se a fornecer acesso total, incluindo cookies, e a execução do Chrome com um sinalizador faz com que funcione.
Surpreende-me que os cookies possam ser lidos a partir de um perfil principal do Chrome pelo Chrome sem cabeçalho. Temos planos para tornar os perfis interoperáveis, mas isso ainda não aconteceu. Talvez os cookies sejam suportados, eu não pareço muito perto.
Obrigado Google!
Não é meio irresponsável publicar isso do nada?
vejo você no inferno eu acho
Minha cabeça dói um pouco e me sinto cansada.
Talvez você esteja desidratado. Tente beber um pouco de água fria.
Isso funciona no Firefox ou nos * shifty eyes * Internet Explorer / Edge?
Não sei, eu não tentei e não tenho ideia de como funcionam esses navegadores. Você poderia tentar descobrir.
Ei, como você acabou encontrando isso? Por que você precisou obter os cookies do Chrome de alguém em primeiro lugar?
Obrigado por dedicar um tempo para ler esta postagem do blog.
Eu escrevi isso porque eles estavam sem pérolas no lugar do chá da bolha. Você pode falar comigo sobre isso no Twitter se quiser: @mangopdf
Graças a @hackgnar , que perguntou em voz alta “deve haver alguma maneira de obter os cookies sem raiz, já que o usuário pode obter seus próprios cookies”.
Obrigado também a @noncetonic e wardolphin, por sua orientação em apontar que o Chrome headless e a depuração remota são uma combinação assustadora.
Comentários
Postar um comentário