Hello again, nesse post vou estar contando a minha experiência na H2HC de 2018.
Por alguns motivos macabros eu cheguei no evento por volta do meio dia no primeiro dia de evento, fiz o credenciamento etecetera e resolvi ir almoçar.
Depois do almoço fui direto pra palestra sobre a Urna Eletronica e segue as notas que eu fiz durante essa palestra:
Day 1
Auditoria na Urna Eletronica
Urna - 15:10
Passos:
- Fase de inspeção dos códigos fonte
- Submeteremos planos de teste
- Os planos de teste são analisados e aprovados pelo TSE
- Executamos os planos de teste em uma bancada
Desde 2009 os processadores são da intel
O Escopo de teste limitado, não se pode realizar testes em biometria e várias outras coisas são limitadas para testar.
A Chave utilizada para cifrar os binários estava em texto claro no código fonte.
As libs não eram hasheadas e foram ownadas pela equipe, uma das libs permitia adulterar o arquivo de log da urna.
No final das contas a urna tem falha pra caralho mas são bem complexadas e é díficil de ser hackeado no pouco tempo útil que um potencial agente malicioso teria.
Outros detalhes foram as falhas de segurança por exemplo no setup das urnas que é feito em ambientes comunitários onde crianças de escolas podem participar, é um possível vetor de ataque.
Depois dessa palestra tive a brilhante ideia de ir ver o que tava rolando no CTF, chegando lá claro, entrei num loop alienigena e só percebi quando era 18:30 e todas as palestras já tinham encerrado.
CTF
Como sempre(Nas duas edições que eu fui) o ambiente de CTF da h2hc é zoado ao meu ver, conflito de informação, a rede deles não tinha DHCP, rotas estranhas, enfim, bem zoado.
Não faço a minima ideia se esse CTF era o trendmicro que a final vai ser ou foi em tokyo ou se era da h2hc mesmo, sei que a equipe que organizou foi a RTFM, eu acho, pelo menos quer dizer, os caras tavam com a camisa da RTFM.
Depois de alguns minutos crimpando cabo e tentando configurar a interface de rede, consegui e comecei a brincar com uma challenge lá que tava no ip 172.17.1.150, depois de um pouco de levantamento:
Starting Nmap 7.60 ( https://nmap.org ) at 2018-10-20 16:54 -03
Nmap scan report for 172.17.1.150
Host is up (0.00021s latency).
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u4 (protocol 2.0)
| ssh-hostkey:
| 2048 c3:54:17:73:2f:d1:6e:fa:d8:e9:10:d7:d3:82:1c:08 (RSA)
| 256 24:d6:b7:33:2f:9a:bf:ce:20:9b:d0:0a:e5:b5:4d:ab (ECDSA)
|_ 256 b8:76:6f:c5:69:92:c9:c3:92:8e:be:17:6e:f6:d2:f8 (EdDSA)
81/tcp open http Apache httpd 2.4.25 ((Debian))
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Apache2 Debian Default Page: It works
6565/tcp open unknown
| fingerprint-strings:
| GenericLines:
| x20 | | _)
| x20 _| _ x20|/ | _` | _| _||x20x20/
| ___|_| _, |.__/__|___/_| _|__,_|__|_| _| __x20
| ___/_|
| Receiving transmission...
| Direto ao ponto: para obter a flag decifre: 662718742916742916568981651626732931168318730383873916402131876516311874298016311887658716742916038916318165037403511602738336391667898116317336871631188716022681871662742626164516311887162931896556168703432980165689811655733687168162167403165689816516028743167303431602872674873587165518733187358765165689811655730331163189160287267487358739166789811631733687163118871665874316627426261645165689811629317356167403165289034387652673034316730343160916291889551656898116188955164387876216311887166573020274314518892687165189872939393966391609311629878747291656898116187335871662893187033174732639162718742
| NULL:
| x20 | | _)
| x20 _| _ x20|/ | _` | _| _||x20x20/
| ___|_| _, |.__/__|___/_| _|__,_|__|_| _| __x20
| ___/_|
| Receiving transmission...
|_ Direto ao ponto: para obter a flag decifre: 497205073945073945941382924561503933450605507806385445876933389245330507398345330538923845073945781345338292780778314574500659544571138245335059384533053845746182384542076161455345330538453933139294453878573983459413824546505938458242450778459413829245743857455078574574386107381838454605503338183892459413824546507833453313457438610738183854457113824533505938453305384592385745420761614553459413824539335094450778452313785738926150785745507857458545390513464594138245051346455738384245330538459250747407335305136138453113383954545449544585334539383829394594138245055018384542133338783307506154457205073
6969/tcp open http Apache httpd 2.4.25 ((Debian))
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Apache2 Debian Default Page: It works
8080/tcp open http H2 database http console
|_http-title: H2 Console
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port6565-TCP:V=7.60%I=7%D=10/20%Time=5BCB87F6%P=x86_64-pc-linux-gnu%r(N
SF:ULL,5BB,"ntx20x20__|x20x20x20x20x20x20x20x20x20x20x20x
SF:20x20|x20x20x20x20x20x20x20x20x20\x20x20|x20x20x20x2
SF:0x20x20x20|x20x20x20x20x20_)x20x20x20x20x20x20ntx20
SF:(x20x20x20x20x20_||x20x20|x20_x20\x20x20_|x20x20_x20
SF:\x20|\/x20|x20x20_`x20|x20x20_|x20x20_||\x20\x20/
SF:x20nt\___|_|x20\_,x20|.__/\__|\___/_|x20x20_|\__,_|
SF:__|_|x20_|x20_\_\x20ntx20x20x20x20x20x20x20x20___/_
SF:|x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x
SF:20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20
SF:x20x20x20x20ntnnx20Receivingx20transmission...x20nx20Dir
SF:etox20aox20ponto:x20parax20obterx20ax20flagx20decifre:x20497205
SF:07394507394594138292456150393345060550780638544587693338924533050739834
SF:53305389238450739457813453382927807783145745006595445711382453350593845
SF:33053845746182384542076161455345330538453933139294453878573983459413824
SF:54650593845824245077845941382924574385745507857457438610738183845460550
SF:33381838924594138245465078334533134574386107381838544571138245335059384
SF:53305384592385745420761614553459413824539335094450778452313785738926150
SF:78574550785745854539051346459413824505134645573838424533053845925074740
SF:73353051361384531133839545454495445853345393838293945941382450550183845
SF:42133338783307506154457205073")%r(GenericLines,5BB,"ntx20x20__|x2
SF:0x20x20x20x20x20x20x20x20x20x20x20x20|x20x20x20x20x20
SF:x20x20x20x20\x20x20|x20x20x20x20x20x20x20|x20x20x20
SF:x20x20_)x20x20x20x20x20x20ntx20(x20x20x20x20x20_||x
SF:20x20|x20_x20\x20x20_|x20x20_x20\x20|\/x20|x20x20_`
SF:x20|x20x20_|x20x20_||\x20\x20/x20nt\___|_|x20\_,x2
SF:0|.__/\__|\___/_|x20x20_|\__,_|\__|_|x20_|x20_\_\x2
SF:0ntx20x20x20x20x20x20x20x20___/_|x20x20x20x20x20x20x2
SF:0x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x20x
SF:20x20x20x20x20x20x20x20x20x20x20x20x20x20x20ntnnx20R
SF:eceivingx20transmission...x20nx20Diretox20aox20ponto:x20para
SF:x20obterx20ax20flagx20decifre:x206627187429167429165689816516267329
SF:31168318730383873916402131876516311874298016311887658716742916038916318
SF:16503740351160273833639166789811631733687163118871602268187166274262616
SF:45163118871629318965561687034329801656898116557336871681621674031656898
SF:16516028743167303431602872674873587165518733187358765165689811655730331
SF:16318916028726748735873916678981163173368716311887166587431662742626164
SF:51656898116293173561674031652890343876526730343167303431609162918895516
SF:56898116188955164387876216311887166573020274314518892687165189872939393
SF:96639160931162987874729165689811618733587166289318703317473263916271874
SF:2");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 79.56 seconds
Eu vi isso aqui:
Apache/2.4.25 (Debian) Server at 172.17.1.150 Port 6969
Então fui dar uma avaliada no banner:
__| | | | _)
( _|| | _ _| _ |/ | _` | _| _|| /
___|_| _, |.__/__|___/_| _|__,_|__|_| _| __
___/_|
Receiving transmission...
Direto ao ponto: para obter a flag decifre: 05883606347606347607614786762559344976263659532671727673684971867649360634427649367186717606347653617649478653065317760459262972767461477649592971764936717604254771766706252576417649367176344961860776715321344276076147761659297176476776065376076147867604712176595321760471250671237176163659497123718676076147761659534976496176047125067123717276746147764959297176493671768671217667062525764176076147763449590776065376096153217186255953217659532176447634366116760761477636611676217171677649367176865904040649413661257176176171347272720572764449763471713534760761477636592371766761497153490659257276883606347668255917764753256126293476493671762636592525715317717659497667618649763043438176616876493606347636613449727276557186717607614776176151769186076749329384498630569018840407134323431390558414677490361591293033128276 de acordo com a matriz a seguir:
--------------------
6 Z z / b " i y 9 W
; # G L P @ w g B }
Q d ? v U l c r D T
_ C K M ~ 0 0 0 0 0
--------------------
[!] OBS: Se o challenge cair, tente novamente dentro de 1 min!
Ficou na cara que era uma challenge de PPC, então comecei a codar com uns outros anonimos lá que não vou citar o nome, no final das contas a gente ficou com um pau no código e já era 18 e pouca e resolvi deixar pra lá, segue o código para registros historicos:
#!/usr/bin/python3
import socket
import sys
import re
def getResult(mapping, matriz):
itens = [x.split(" ") for x in matriz]
itens.append(e"")
itens.insert(0,"")
acc = ""
print(itens)
for a in range(len(mapping)):
try:
if(a % 2 != 1):
acc += itens[int(str(mapping[a]))][int(str(mapping[a+1]))]
a += 2
except:
pass
return acc
def recebe(s):
return re.findall(r'[0-9]+', s)
def getMatrix(s):
arr = s.split('--------------------')[1].strip().split("n") # Possivel falha aqui, sem acesso ao server para realizar testes
return arr
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('172.17.1.150',6565))
dataSocket = s.recv(2048).decode() # Recebe valores do socket
hashMap = recebe(dataSocket)[0] # Passa para regex para extrair o texto cifrado
matrix = getMatrix(dataSocket) # Tenta receber a Matriz atráves de split/strip [ ERROR ]
resultSet = getResult(hashMap, matrix)
print(resultSet)
exit()
Tinha uma outra challenge de eng reversa mas eu só peguei o arquivo, ta na minha lista aqui de afazeres.
Então fui pro hotel.
Day2
Exploring the Safari: Just in time Exploitation
Demonstração de exploração e buffer overflow no safari, essa palestra tava em inglês, os tradutores nunca ajudam muito e o cara falava muito rápido, então vai ter vários pontos de interrogação por ai nas notas.
Segunda CVE 2018-???
Leaking Information.
A maioria dos navegadores possui falhas semelhantes pois o trabalho deles seguem as mesmas especificações
Na real eu cheguei atrasado pra essa palestra. KKJ peguei o finalzinho.
Constraint Solvers For Reverse Engineering
Esse tema é bastante interessante, eu conheci no ano passado na palestra da Barbie alguma coisa e é simplesmente do caralho.
Constraint é basicamente a relação entre variaveis.
Constraint Solvers
Constraint Programmming
Express relations between variables in the form
Microsoft Z3 -> SMT Solver da MS
- Extremely powerful contrainet solver(prover)
- Bindings to python -> easy to use
- Open - Source
-> Bom para identificar se determinada função é segura.
Outras opções
Language
How talk to Z3 and smt solvers in general.
- Do u like lisp
SMT Lib -> smtlib.cs.uiowa.edu -> versão 1 e 2
LISP BitVec 8 ->
SMT Solver for CTF
Função que receba um input de usuário e é necessário filtrar certos caracteres
Com a teoria de strings e regex você pode usar o Z3 para realizar os testes.
Fuzzing com SMT
Projeto SAID(?) Projeto da microsoft que utilizou essa funcionalidade para achar falhas no MS e no office.
klee/klee -> Testa todos os caminhos possíveis da função, Inferno p/ compilar
MantiCore -> ctf
Junto com o manticore existem vários exemplos.
crackme and stuff
github.com/edgarmb
SPLITTER TOr STUFF
Essa palestra aqui foi a que fez o evento inteiro valer a pena, muito interessante e eu até fiz outro post sobre isso explicando etc.
Segue as notas:
Splitter -> Ferrametna para dificultar o tráfego do tor, sobe instâncias do tor.
hproxy -> interface web que pode ser utilizada para monitorar o status da instancia do browser.
Setar o browser pro tor.
Não precisa usar o browser do tor.
o splitter vai gerar credenciais aleatorias para a utilização.
Basicamente um loadbalance entre várias instâncias do tor.
Cada instância ta amarrada em um país diferente, logo a diferença de entry node, exit node do tor. Então diminui as changes de utilizar um relay adulterado.
Técnicas de De-Anonymization, ataques à rede tor.
Pontos fracos dessa técnica: (Que o splitter vai tentar explorar e quebrar a correlação) (?)
-
Quando vocẽ acha que ta usando o torbrowser você não está completamente seguro, o que é obvio.
Com essa técnica, você consegue consumir vídeos em vários instãncias do tor, podendo ter uma resposta mais rápida. O problema do tor é que é lento, com esse loadbalance
Estatisticas para nerd.
Remover países
Motivation:
- Privacy is just a dream.
- Tor Network is slow and unstable!
- many de-anonymization techniques impacting the trhust of users on tor networking
Quem controla a chave privada controla o tráfego.
APP: "Konversations"
No momento que o circuito do tor pegar um relay que está num país lento, todo o circuito é afetado.
Máquinas adulteradas podem fazer técnicas de de-anonymatizon
O tor só é utilizado na hora de fazer merda.
Correlação é a relação do entry-node com o exit-node.
O Básico sobre o tor.
Uma vez que o circuito é fechado, ela fica fechado mesmo que você não esteja conectado, time-based shit. A conexão já fica estabelecida para que próximos usuários que forem utilizar, o circuito já está estabelecido.
A sua conexão vai permanecer no tor durante 10 minutos, é o tempo que o circuito no tor que a conexão vai ficar estabelecida. Muitas técnicas de de-anony, exibem tempo para que você seja identificado pelo tcp stream atráves de uma injeção de _________
TCP STREAM -> Conexão já estabelecida, 3way handshake.
COrrelação do entry-node com o exit-node, correlação envolve caracteristica de tráfego e correlaçao do tempo, vão procurar pela pattern injetada e analsiar o tempo para identificar que é você.
A importância do entry-node e porquẽ ele é o alvo das técnicas de de-anoyn, porquẽ é o primeiro que você se conecta, então se o entry-node for adulterado, você já foi sabotado, é importante não se conectar diretamente, utilizar VPN.
É bem comum eles pegarem o exit-node, então vão saber pra onde você está indo.
O Middle-node, basicamente quebra a correlação natural(De qual site site você está acessando), o middle-node não conhece você, então o middle-node quebra a correlação.
São muitas técnicas, foram selecionadas 3 porém só será falado sobre duas.
Paper:
- Low-Resource Routing Attacks Anonyomus Systems.
Identificar em qual posição o relay adulterado tá. (?)
Paper:
A Practival Congestion Attack on Tor Using long paths
Habilitar JS
filetype:pdf inurl:evans -> https://www.useninx.org/legacy/event/sec09/tech/full_papers/evans.pdf
Para trabalhar com tor precisa-se blindar 100%
Paper:
"How Much Anonymity does network latency leak" Pela latencia é possível identificar a rota, e fazer a correlação.
tisssec-latency-leak.pdf
Favorita:
Paper:
On The effectiveness of traffic analysus Agaisnt Anonymity Network Using Flow Records.
Usandi protocolo da cisco a nível de core da internet. Mapearam os relays da tor e pegaram os nodes que estavam próximo de roteadores. Roteadores proximos do entry-node, então você tem um cenario
Adulteram o server e colocam os arquivos, arquivos podem ser qualquer coisa que o browser vai fazer download. Então eles injetam uma pattern para que se identifique o disturbiu causado na hora que volta pra rede tor e na hora que sai da rede tor, utiliznado os protocolos da cisco.
Esssa técnica é absurda, porquẽ a galera conseguiu IRL, não em lab, identificaram 81.4% das pessoas com precisão.
As técnicas tem em comum o seguinte, que será utilizado o mesmo circuito do tor para transferir a pattern, o mesmo path global será feito.
Cada técnica tem uma pattern.
The exploit challenge:
Então pra cada tcp stream tem que fazer passar por um circuito diferente(entry-node,middle-node,exit-node). Cada requisição tem que ser feita por um circuito diferente.
A geração de circuito é aleatória, então você pode cair num adulterado, por isso você precisa controlar isso.
É necessário controlar o tempo de conexão do tcp stream, não se pode deixar a conexão por tempo suficiente
github.com/renegr1nch/splitter
O Splitter vai forçar o tor a trocar o circuito a toda hora, por padrão é 10 minutos, com o splitter você consegue usar 10 segundos. 10 segundos é o tempo minimo limite.
O caminho do tcp stream que vai correr ->
hproxy -> privoxy -> tor
layer7 -> layer5 -> layer5
Como controlar o país que o tor está utilizando:
Arquivo de configuração, entry-nodes:
Países para entry-node.
exit-nodes -> todos os páises exceto determinado país. forçar um caminho geográfico diferente.
COmo exlude-nodes, coloca todos os outros páises
Ciclo de vida do splitter
Baseado no ciclo de instãncias ativas: Baseado em lista de paises, configura o tor, inicia a instancia, forca um novo circuito, mata a instancia.
O arquivo de configuração do hproxy, por padrão utiliza roundrobin, gera uma pattern, o que é ruim pois poderia ser identificado o próximo.
aliguard vps, na vps vai estar o splitter, que vai conectar numa vpn publica.
Uma vez que o exit-node repete, pode significar que o seu dado está passando por um node que pode estar adulterado.
Por padrão o splitter evita de utilizar nodes com pouca banda.
Considerações Finais:
Utilizar o tor sem combinação de VPN+VPS = suicidio, só analisar os papers.
Verificar quantos exit-nodes um determinado país tem antes de incluir tal país na lista.
O Spliiter vai dificultar as coisas para técnicas de de-anonymized techiniches
Antes de considerar um país na lista é necessário identificar quantos exit-nodes existem no país
Uma vez que sua conexão na tor fica estável, você se torna um entry-node da rede.
Dump com tcp stream sendo morto
Download de uma ISO, começa via splitter, quando ele cortar o tcp-stream, utilizar um wget pra se preparar para um corte, então o wget por exemplo poderia suportar o kill do tcp-stream
wget -c -> Dá sequencia no download.
Cracking the captcha
Essa palestra foi de um palestrante que ano passado falou sobre Parasite OS, eu achei que a palestra ia ser foda mas fiquei meio frustrado, mas sem problemas.
Ele basicamente criou um algoritmo para quebrar captchas e contou lá todas as dificuldades que ele teve, eu não fiquei até o final pois tinha que voltar pra minha aldeia.
Computer Vision, OCR octical caracter recognization
Captcha -> Complete automatec public turning test to tell computes and humans apart.
Sessão -> Sessão de usuário e server
Soluução ->
Ferramenta do google que faz OCR,
guerrilhamail. api ajax que cria os usuários automaticos.
TESSEREACT
opencv -> Manipulação de imagem
Thats all
