SlideShare uma empresa Scribd logo
1 de 23
Taller de reversing de
binarios escritos en
GoLang
Who We Are
Mariano Palomo
• Malware Analyst
@voidm4p
voidm4p@protonmail.com
Oscar García
• Malware Analyst
@rer0k_
r3r0k@protonmail.com
¿Por qué estamos aquí?
• Como afrontar el reversing ante un “nuevo” lenguaje
• Debemos evolucionar y adquirir nuevos
conocimientos a medida que también lo hace el
malware
• Estar preparados y tener nuestro set de herramientas
para cuando nos enfrentemos a otros ejemplos en la
“vida real”
Go / GoLang
• Lenguaje de programación que permite
compilar binarios multiplataforma a
partir de un mismo código fuente.
• Utiliza recolector de basura para reservar
y liberar memoria automáticamente.
• Código fácil de mantener: sin clases,
herencia, constructores, excepciones, etc
Go Malware!
• Malware/Packers para Mac, Windows y Linux desde
un mismo código fuente
• Ejemplos:
• Ransomware: EKANS, Phantom, Robin Hood
• Go-mimikatz
• Merlin Agent
• Linux.Rex
• …
Proceso de generación de binarios
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
Código
Hello World
compilado
GOOS=<plataforma> GOARCH=<arquitectura> go build hello.go
Desde el punto de vista del reversing
_r0_386_windows (Entry Point)  rt0_386  runtime.newproc(*runtime.main)  main.main
_rt0_386
runtime_main main_main
1
2
3
Desde el punto de vista del reversing
• Casi 2000 subrutinas con tan solo 1 línea de código…
main.main
Wrapper para los panics
Carga de cadena
Llamada a println
Binarios stripped
GOOS=<plataforma> GOARCH=<arquitectura> go build -ldflags “-s” hello.go
“Elimina” el nombre de las funciones
Binarios stripped - Problemas
• Las funciones no retienen su nombre cuando se compila stripped. Sin
embargo, parecen seguir presentes en el binario si se utiliza el comando
strings.
• La carga de cadenas de caracteres es “extraña” y cambia con la
arquitectura. Además, todas las cadenas se agrupan en una misma
región, sin acabar en 0x00, apuntando a offsets concretos dentro de este
listado.
Binarios stripped – Recuperando los
nombres de las funciones
• La sección .gopclntab contiene una estructura que recoge todos los nombres
originales de funciones  Presente en ELF, en PE hay que buscarla
• Magic header (LE): “FB FF FF FF 00 00”
• Estructura (x32):
+info: https://lekstu.ga/posts/pclntab-function-recovery/
Struct gopclntab {
char cabecera[8];
uint numeroDeFunciones;
struct funcion{
char dirección[4];
char offsetNombreFuncion[4];
}[numeroDeFunciones]
}
magic
Binarios stripped – Strings
• Definir como “data” y definir, buscando por el patrón que carga cadenas,
cada una de ellas con el tamaño adecuado
IDAGolangHelper
• Scripts escritos por George Zaytsev
• Cargar el binario en IDA
• Cargar script (File  script file)
• Determinar versión de Go y seleccionar
• Rename functions, add standard go types,
parse types by moduledata, strings
(Shift+S)
IDA 6.8: https://github.com/sibears/IDAGolangHelper/tree/e2ead174d7abda3252f2995783fbf084d88cd56d
IDA 7.4: https://github.com/sibears/IDAGolangHelper/tree/8e063fdf573424d5d84ea02b17e73e1601b000e2
Reto: Go go go!
• Obtén el flag del siguiente binario
f6446fe1d43ecf9b26a6806d13528d11
file
• No tenemos mucha información, ¿qué tipo de fichero es?
o ELF
o Big Endian
o MIPS32
o stripped
MIPS
• Microprocessor without Interlocked Pipeline Stages
• Existen cinco revisiones compatibles hacia atrás del conjunto de
instrucciones del MIPS, llamadas MIPS I, MIPS II, MIPS III, MIPS IV y
MIPS 32/64
• Manual de conjunto de instrucciones:
https://www.dsi.unive.it/~gasparetto/materials/MIPS_Instruction_Set.pdf
IDAGolangHelper + MIPS
IDAGolangHelper + MIPS
• Modificación en la función de reconocimiento de Strings para MIPS
Go go go! – Análisis estático
QEMU + IDA
$ sudo apt install qemu-user
$ qemu-mips -g <PORT> LetsGo
Muchas gracias

Mais conteúdo relacionado

Mais procurados

Elias Grande - Dagda [rootedvlc4]
Elias Grande - Dagda [rootedvlc4]Elias Grande - Dagda [rootedvlc4]
Elias Grande - Dagda [rootedvlc4]RootedCON
 
Gerardo Garcia Peña - Crypto Goofs... [rooted2018]
Gerardo Garcia Peña - Crypto Goofs... [rooted2018]Gerardo Garcia Peña - Crypto Goofs... [rooted2018]
Gerardo Garcia Peña - Crypto Goofs... [rooted2018]RootedCON
 
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRootedCON
 
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...RootedCON
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonWebsec México, S.C.
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoWebsec México, S.C.
 
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)Jaime Sánchez
 
Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013Websec México, S.C.
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]RootedCON
 
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...RootedCON
 
Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...
Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...
Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...RootedCON
 
Forense en windows - Resolución Reto I de Dragonjar
Forense en windows -  Resolución Reto I de DragonjarForense en windows -  Resolución Reto I de Dragonjar
Forense en windows - Resolución Reto I de DragonjarAlejandro Ramos
 
Análisis Forense de la Memoria RAM de un sistema
Análisis Forense de la Memoria RAM de un sistemaAnálisis Forense de la Memoria RAM de un sistema
Análisis Forense de la Memoria RAM de un sistemaEventos Creativos
 
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]RootedCON
 
Análisis Forense Memoria RAM
Análisis Forense Memoria RAMAnálisis Forense Memoria RAM
Análisis Forense Memoria RAMConferencias FIST
 
Fuerza bruta con hydra y montando un ssh
Fuerza bruta con hydra y montando un sshFuerza bruta con hydra y montando un ssh
Fuerza bruta con hydra y montando un sshTensor
 
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]RootedCON
 

Mais procurados (20)

Elias Grande - Dagda [rootedvlc4]
Elias Grande - Dagda [rootedvlc4]Elias Grande - Dagda [rootedvlc4]
Elias Grande - Dagda [rootedvlc4]
 
Gerardo Garcia Peña - Crypto Goofs... [rooted2018]
Gerardo Garcia Peña - Crypto Goofs... [rooted2018]Gerardo Garcia Peña - Crypto Goofs... [rooted2018]
Gerardo Garcia Peña - Crypto Goofs... [rooted2018]
 
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
 
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino Calderon
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto Salgado
 
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
 
NASL
NASLNASL
NASL
 
NASL
NASLNASL
NASL
 
Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
 
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
Juan Antonio Calles & Patricia Rada - Biohacking: Almacenando información en ...
 
Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...
Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...
Sergio De Los Santos - BREAKING OUT HSTS (AND HPKP) ON FIREFOX, IE/EDGE AND (...
 
Forense en windows - Resolución Reto I de Dragonjar
Forense en windows -  Resolución Reto I de DragonjarForense en windows -  Resolución Reto I de Dragonjar
Forense en windows - Resolución Reto I de Dragonjar
 
Análisis Forense de la Memoria RAM de un sistema
Análisis Forense de la Memoria RAM de un sistemaAnálisis Forense de la Memoria RAM de un sistema
Análisis Forense de la Memoria RAM de un sistema
 
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
 
Análisis Forense Memoria RAM
Análisis Forense Memoria RAMAnálisis Forense Memoria RAM
Análisis Forense Memoria RAM
 
Fuerza bruta con hydra y montando un ssh
Fuerza bruta con hydra y montando un sshFuerza bruta con hydra y montando un ssh
Fuerza bruta con hydra y montando un ssh
 
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
 
Thc hydra
Thc hydraThc hydra
Thc hydra
 

Semelhante a Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palomo_-_oscar_luis_garcia

Semelhante a Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palomo_-_oscar_luis_garcia (20)

Python
PythonPython
Python
 
An Evening with... Go Lang
An Evening with... Go LangAn Evening with... Go Lang
An Evening with... Go Lang
 
Javascript
JavascriptJavascript
Javascript
 
04 j flex
04 j flex04 j flex
04 j flex
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Slides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4edSlides taller de exploiting Navaja Negra 4ed
Slides taller de exploiting Navaja Negra 4ed
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Introduccion a Java
Introduccion a JavaIntroduccion a Java
Introduccion a Java
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
Material taller de exploiting Navaja Negra 4ed
Material taller de exploiting Navaja Negra 4edMaterial taller de exploiting Navaja Negra 4ed
Material taller de exploiting Navaja Negra 4ed
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 

Mais de RootedCON

Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_RootedCON
 
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...RootedCON
 
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...RootedCON
 
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRootedCON
 
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRootedCON
 
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...RootedCON
 
Rooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRootedCON
 
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRootedCON
 
Rooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRootedCON
 
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...RootedCON
 
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...RootedCON
 
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRootedCON
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRootedCON
 
Rooted2020 emotet is-dead_long_live_emotet_-_victor_acin
Rooted2020 emotet is-dead_long_live_emotet_-_victor_acinRooted2020 emotet is-dead_long_live_emotet_-_victor_acin
Rooted2020 emotet is-dead_long_live_emotet_-_victor_acinRootedCON
 
Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...
Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...
Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...RootedCON
 
Rooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalez
Rooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalezRooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalez
Rooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalezRootedCON
 
Rooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torrano
Rooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torranoRooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torrano
Rooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torranoRootedCON
 
Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.
Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.
Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.RootedCON
 
Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]
Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]
Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]RootedCON
 
Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...
Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...
Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...RootedCON
 

Mais de RootedCON (20)

Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
 
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
 
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
 
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
 
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
 
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
 
Rooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopez
 
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
 
Rooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jara
 
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
 
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
 
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 
Rooted2020 emotet is-dead_long_live_emotet_-_victor_acin
Rooted2020 emotet is-dead_long_live_emotet_-_victor_acinRooted2020 emotet is-dead_long_live_emotet_-_victor_acin
Rooted2020 emotet is-dead_long_live_emotet_-_victor_acin
 
Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...
Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...
Rooted2020 el camino-de_hacktiago_tras_los_pasos_de_14_increibles_cibersantua...
 
Rooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalez
Rooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalezRooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalez
Rooted2020 dev secops-into_the_unknown_-_jesus_alcalde_-_daniel_gonzalez
 
Rooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torrano
Rooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torranoRooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torrano
Rooted2020 atacando la-debilidad_humana_-_ruth_sala_-_carmen_torrano
 
Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.
Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.
Rooted2020 a ver-como_nos_lo_montamos_a_vueltas_con_las_da_os_-_rootedpanel.
 
Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]
Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]
Jordi Ubach - Breaking critical infrastructures [rootedvlc2019]
 
Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...
Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...
Ruth Gonzalez & Miguel Hernández - Lo que un stalker puede saber de ti, los r...
 

Último

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (15)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palomo_-_oscar_luis_garcia

  • 1. Taller de reversing de binarios escritos en GoLang
  • 2. Who We Are Mariano Palomo • Malware Analyst @voidm4p voidm4p@protonmail.com Oscar García • Malware Analyst @rer0k_ r3r0k@protonmail.com
  • 3. ¿Por qué estamos aquí? • Como afrontar el reversing ante un “nuevo” lenguaje • Debemos evolucionar y adquirir nuevos conocimientos a medida que también lo hace el malware • Estar preparados y tener nuestro set de herramientas para cuando nos enfrentemos a otros ejemplos en la “vida real”
  • 4. Go / GoLang • Lenguaje de programación que permite compilar binarios multiplataforma a partir de un mismo código fuente. • Utiliza recolector de basura para reservar y liberar memoria automáticamente. • Código fácil de mantener: sin clases, herencia, constructores, excepciones, etc
  • 5. Go Malware! • Malware/Packers para Mac, Windows y Linux desde un mismo código fuente • Ejemplos: • Ransomware: EKANS, Phantom, Robin Hood • Go-mimikatz • Merlin Agent • Linux.Rex • …
  • 6. Proceso de generación de binarios package main import "fmt" func main() { fmt.Println("hello world") } Código Hello World compilado GOOS=<plataforma> GOARCH=<arquitectura> go build hello.go
  • 7. Desde el punto de vista del reversing _r0_386_windows (Entry Point)  rt0_386  runtime.newproc(*runtime.main)  main.main _rt0_386 runtime_main main_main 1 2 3
  • 8. Desde el punto de vista del reversing • Casi 2000 subrutinas con tan solo 1 línea de código… main.main Wrapper para los panics Carga de cadena Llamada a println
  • 9. Binarios stripped GOOS=<plataforma> GOARCH=<arquitectura> go build -ldflags “-s” hello.go “Elimina” el nombre de las funciones
  • 10. Binarios stripped - Problemas • Las funciones no retienen su nombre cuando se compila stripped. Sin embargo, parecen seguir presentes en el binario si se utiliza el comando strings. • La carga de cadenas de caracteres es “extraña” y cambia con la arquitectura. Además, todas las cadenas se agrupan en una misma región, sin acabar en 0x00, apuntando a offsets concretos dentro de este listado.
  • 11. Binarios stripped – Recuperando los nombres de las funciones • La sección .gopclntab contiene una estructura que recoge todos los nombres originales de funciones  Presente en ELF, en PE hay que buscarla • Magic header (LE): “FB FF FF FF 00 00” • Estructura (x32): +info: https://lekstu.ga/posts/pclntab-function-recovery/ Struct gopclntab { char cabecera[8]; uint numeroDeFunciones; struct funcion{ char dirección[4]; char offsetNombreFuncion[4]; }[numeroDeFunciones] } magic
  • 12. Binarios stripped – Strings • Definir como “data” y definir, buscando por el patrón que carga cadenas, cada una de ellas con el tamaño adecuado
  • 13. IDAGolangHelper • Scripts escritos por George Zaytsev • Cargar el binario en IDA • Cargar script (File  script file) • Determinar versión de Go y seleccionar • Rename functions, add standard go types, parse types by moduledata, strings (Shift+S) IDA 6.8: https://github.com/sibears/IDAGolangHelper/tree/e2ead174d7abda3252f2995783fbf084d88cd56d IDA 7.4: https://github.com/sibears/IDAGolangHelper/tree/8e063fdf573424d5d84ea02b17e73e1601b000e2
  • 14. Reto: Go go go! • Obtén el flag del siguiente binario f6446fe1d43ecf9b26a6806d13528d11
  • 15. file • No tenemos mucha información, ¿qué tipo de fichero es? o ELF o Big Endian o MIPS32 o stripped
  • 16. MIPS • Microprocessor without Interlocked Pipeline Stages • Existen cinco revisiones compatibles hacia atrás del conjunto de instrucciones del MIPS, llamadas MIPS I, MIPS II, MIPS III, MIPS IV y MIPS 32/64 • Manual de conjunto de instrucciones: https://www.dsi.unive.it/~gasparetto/materials/MIPS_Instruction_Set.pdf
  • 18. IDAGolangHelper + MIPS • Modificación en la función de reconocimiento de Strings para MIPS
  • 19. Go go go! – Análisis estático
  • 20. QEMU + IDA $ sudo apt install qemu-user $ qemu-mips -g <PORT> LetsGo
  • 21.
  • 22.

Notas do Editor

  1. Comienza OSCAR
  2. Bueno, como sabéis esto del reversing normalmente es una tarea algo solitaria, una de esas noches navegando por internet por sitios absolutamente confiables me saltó un banner que decía algo así como.. AUDIO MI AMOL… y bueno, como la gente de CCN nos había comentado la idea de dar una charla sobre alguno de los retos de Atenea del año pasado pues, en este caso venimos dos personas a contaros lo que hemos hecho. Yo soy… OSCAR
  3. ¿Por qué estamos aquí? Pues bueno la idea es contar un poco como sería la tarea de afrontar el reversing ante un “nuevo” lenguaje de programación, que es GoLang. Entre comillas lo de nuevo, pq quizás no lo es tanto, pero puede que al no ser tan popular no lo conozca tanta gente, y por tanto no sea tan usado, o al menos eso es lo que se podría creer. Simplemente, por sondear un poco, cuantos de vosotros habéis oído hablar de Go? Vale, cuantos habéis hecho algún programa en Go? Y a cuantos les ha tocado alguna vez analizar algún binario hecho en este lenguaje? Además, como analistas de malware, debemos evolucionar y adquirir nuevos conocimientos constantemente y, sobre todo, a medida que también adaptándonos a como evoluciona el propio desarrollo de malware. Por tanto, debemos estar preparados y tener a punto nuestro set de herramientas para cuando nos tengamos que enfrentar a otros ejemplos en la “vida real”
  4. Qué es GoLang? GoLang es un lenguaje de programación que permite compilar binarios multiplataforma a partir de un mismo código fuente, lo cual lo hace tremendamente atractivo desde el punto de vista del desarrollador. Solo tenemos que programar lo qe queremos hacer una vez y, dejar que el compilador haga su trabajo para obtener el mismo programa en diferentes arquitecturas y sistemas operativos. Además, a diferencia del lenguaje compilado más popular, C++, GoLang incluye un recolector de basura para el tema de reservar y liberar memoria, así que nos podemos olvidar de los alloc y free. Por otra parte, también se olvida de la orientación a objetos, herencia, constructores y demás, para poder crear un código más fácil de mantener.
  5. Pues bien, todo esto, igual que podría sonar muy bien para cualquier programador, también lo hace para los desarrolladores de malware y, vemos ejemplos que han surgido últimamente, sobre todo con los ransomwares como EKANS, Phantom, Robin Hood, pero también otras tipologías como RATs o programas ya existentes que se han portado a Go como Go-mimikatz.
  6. Entonces, de todo esto, desde el punto de vista del reversing, lo que nos interesa saber es que, desde un mismo código fuente, se puede generar un binario PE/ELF/MachO en el que incluye el framework de Go Runtime completo que se encarga de servir como capa intermedia entre el código programado y el sistema operativo, algo así como lo que veis en esa figurita. La compilación de un Hello World es tan sencilla como lo que veis ahí.
  7. Si desensamblamos el código generado, vemos que el binario es enorme, debido a lo que os decía que incluye el código del framework completo. Con respecto al main que hemos programado, si partimos del entry point del programa, vemos que se realiza un salto a un label rt0_386 que crea un nuevo proceso pasándole la dirección de runtime.main que, a su vez, llama a main.main que es el código real programado.
  8. Comienza MARIANO: Como os decía mi compañero, cuando empiezas a indagar más en el código desensamblado, te das cuenta que con tan solo una línea de código para el Hello World, se han generado casi 2000 subrutinas que Go incluye para ejecutarse. A la derecha se aprecia cómo se ve la función main.main. Se ve la cadena “Hello World” siendo cargada pero también vemos alguna magia negra que así a simple vista no reconocemos, como llamadas a runtime.morestack.noctxt, en fin cosas que nos mete Go por medio. Todo esto son flujos que crea Go a partir de una única línea de código. Y ya, al final del todo esto, vemos la llamada a la función de la línea de código que habíamos escrito: el println de la fmt. Como se puede apreciar, tras el desensamblado de este tipo de binarios se aprecia la gran cantidad de código que se ha generado y esto puede resultar algo confuso, incluso pensar que se está intentando ocultar algo o que se trata de algo más que una simple línea de código. Un packer mega tocho o a saber.
  9. Y, con el fin de intentar dificultar aún más la tarea de reversing, se puede utilizar la opción de compilación –s que strippea el código y “elimina” el nombre de las funciones utilizadas, como solemos ver en otros compiladores normalmente.
  10. ¿Qué pasa con esto? Pues que, por una parte, como veíais en la diapositiva anterior, las funciones ya no aparecen con su nombre bonito. Sin embargo, ocurre algo curioso y es que si le tiramos un comando strings, estos nombres de funciones siguen estando en algún sitio, porque aparecen ahí. Luego veremos por qué. Por otra parte, las cadenas de caracteres también se cargan de otra forma, agrupándose todas como un bloque sin el final de cadena (0x00, \0) y, se referencia a ellos, mediante el inicio del bloque, el offset en el que se encuentra y su tamaño.
  11. Pues bueno, como os adelantaba antes que ocurría con los stings, en los que seguían apareciendo el nombre de las funciones. Resulta que GoLang crea una sección en el binario llamada .gopclntab, la cual la podemos ver directamente en binarios ELF, pero en los PE hay que buscarla. Por suerte, resulta que comienza con el magic header “FB FF FF FF 00 00 XX XX” en Little Endian (8 bytes). En la estructura de esta sección, tras esto, se encuentra el tamaño de la tabla. En 32 bits, los siguientes 4 bytes apuntan a la localización de la primera función y, seguido a estos, un offset que apunta al nombre de esa función si se cuenta desde el principio de la tabla. De esta forma se puede obtener el nombre original de la función.
  12. Con el caso de los strings, dependiendo de cada arquitectura, el algoritmo para cargarlos cambia un poco, pero la idea se basa en lo que os comentaba. Se suele hacer referencia al inicio del bloque y utilizar un offset y longitud para localizar el binario. Pero también puede ser un puntero a este valor+offset o, directamente un valor inmediato apuntando a la dirección.
  13. Esto que os cuento, tampoco es que lo hayamos descubierto por primera vez nosotros. De hecho, hay un script de George Zaytsev que permite, tras cargar el binario en IDA aplicar esta idea. Simplemente, seleccionamos que intente determinar la versión de Go, ya que en base a esto, los algoritmos cambian un poco y, tras esto, podemos decirle que recupere el nombre de las funciones. Para el caso de los strings, habría que pulsar Shift+S para que ejecute el algoritmo dentro de la función que nos encontremos.
  14. SIGUE OSCAR!!! Dicho esto, entramos en materia. Atenea para el que no la conozca, es una plataforma de desafíos de seguridad informática. Esta se encuentra compuesta de diferentes tipos de retos: Criptografía y Esteganografía, Hacking Web, Forense, Análisis de trafico, Reversing y OSINT y, del reto que os vamos a hablar, es Go go go! que se encuentra en la sección de retos archivados de 2019. El reto, dice simplemente: “obtén el flag del siguiente binario”. Pues vamos al lio.
  15. Nos bajamos el ZIP, lo descomprimimos con la pass infected y, como no tenemos mucha información sobre el binario, le tiramos un file. Vemos que se trata de un ELF en Big Endian para arquitectura MIPS32 y que es stripped. Si se le tira un strings se pueden ver cadenas que hacen referencia a Go. Así que, además del título pues, podéis haceros una idea de por donde van los tiros no?
  16. Vale, MIPS es el acrónimo de esos palabros que veis ahí y existen cinco revisiones del set de instrucciones. Aquí además os dejamos un enlace a un manual con el set de instrucciones que es la referencia que hemos utilizado para el reto.
  17. Vamos a tirar con IDA para ver el desensamblado del código. Como ya explicamos en las diapositivas anteriores, las cadenas de caracteres están en un bloque conjunto que es referenciado por punteros. Al tratarse de MIPS el Script de IDAGolangHelper no reconoce este set de instrucciones por lo tanto es necesario adaptarlo para que lo reconozca y haga el trabajo por nosotros. Esta adaptación consiste en identificar los dos patrones mostrados en las imágenes. Un primer formato vemos que es con la carga de la posición de memoria donde se encuentra el bloque + el desplazamiento y el tamaño que está en el load inmediatly Un segundo formato con la carga de un inmediato que es la dirección al inicio de la cadena de caracteres directamente y, de igual forma, el tamaño.
  18. Aquí vemos como modificamos el Script para que reconozca el nuevo patrón de instrucciones al cargar una cadena de caracteres Si la instucción es li o la con los parámetros de un inmediato (o región de memoria) a un registro, se comprueba si es un string Además, para el caso de los inmediatos, se añade un comentario para que aparezca el valor de la cadena cuando la carga ya que IDA no lo reconoce de forma automática. El algoritmo para saber si es una cadena, en caso de tratarse de MIPS, sería, comprobar si los siguientes valores son sw -> li (tamaño) -> sw. Tras esto, ya aparecerían las strings como véis aquí abajo
  19. Una vez hecho esto, buscamos de la misma forma que antes el main que ha creado el programador (main_main). También es intenresante señalar que en la función main.init: se puede ver la carga de librerías que se han incluido para el desarrollo del programa. Destacan las dos últimas, que, como véis vienen de repositorios de github. La primera es para obtener y parsear la info del sistema (en Linux, el típico uname) y, la segunda, es para pintar cadenas como banners ASCII, rollo hacker to guapo. Ya entrando en el main.main se puede ver que lo primero que hace es llamar al GetInfo y comprobar si el valor devuelto contiene la cadena 4.14.0, es decir, está buscando ejecutarse bajo esa versión de kernel. Después, se ve la definición de un par de arrays de bytes a partir de strings, para terminar utilizando un tercero como parámetro “key” en la creación de un nuevo objeto criptográfico AES. Más adelante, recupera una cadena en base64, pero que parece utilizar un alfabeto personalizado y, el resultado de decodificar esta cadena, es pasado a la función NewCFBDecrypter, donde el objeto AES prepara el descifrado en modo CFB los datos decodificados a descifrar.
  20. Como se trata de MIPS, para poder debugear el binario, hemos optado por conectar el remote gdb de IDA a un qemu que inicia gdb y espera a que se le conecten por un puerto. En la imagen esta mostramos cómo lo hicimos.
  21. Comenzamos poniendo un BP en la llamada a GetInfo que veíamos. Para evitar las comprobaciones que va a realizar, directamente, modificamos el contador del programa ($pc) para que la siguiente instrucción sea la del flujo que sigue si coincide la cadena. A partir de ahí, continuamos por todas las instrucciones que habíamos visto en estático. Aquí vemos que la clave para la creación del objeto AES es, efectivamente, la última declarada en el código. Continuamos con la ejecución y, vemos que llega hasta la parte en que va a decodificar la cadena Base64. Antes de esto, recupera el alfabeto personalizado que ha utilizado para encodear la cadena en el dword que señala el video. Ahí se ve, que son los caracteres del abecedario, minúscula y mayúscula, números y – y _. Continuamos y vemos que decodifica la cadena y llega hasta la llamada a NewCFBDecrypter. En este punto, comprobamos que, pasándole el puntero a la cadena que se había decodificado, toma los 16 primeros bytes como vector de inicialización (IV) para preparar un descifrado mediante el objeto AES que veíamos al principio. La ejecución continúa y se recupera el resto de la cadena base64 decodificada para llamar a XORKeyStream que realiza el descifrado. Tras esta llamada, se puede ver como, en el objeto destino, aparece la cadena Flag: XXXX. Y, que tras comprobar en la plataforma, vemos que es correcta. El programa tiene más flujo a partir de aquí, como comprobaciones para que el el sistema sea Linux y, para imprimir por pantalla con el arte ASCII esto. Pero, como ya teníamos el flag, no ha sido necesario seguir debugueando.