Resolvendo un reto de inxeñería inversa

Navegando polos meus RSS cheguei a este post de cyberhades, nel falan dun reto de reversinglabs. Gústame moito todo o relacionado coa seguridade informática e teño visto moitos dos solucionarios de retos que había por ai, pero nunca me puxera a facer un eu mesmo, xa que estamos no vrao e o traballo descendeu bastante díxenme que ía botarlle un ollo a ver se seguindo o solucionario o daba solucionado. Cría que ía ser moi sinxelo, pero non o é.

Imos por partes, o primeiro é baixar o ficheiro do reto, é un ficheiro r.zip, o primeiro que fixen foi abrilo, e aparece unha carpetas R que se a abres ten dentro outro ficheiro r.zip e se o abres aparece outra carpeta r co seu ficheiro r.zip e así ata que te canses. Isto xa nos da unha pista de que hai gato encerrado co ficheiro zip, efectivamente tal e como se comenta no solucionario de CyberHades, o ficheiro zip e sensiblemente máis grande (30K) do que nos indica cando o abrimos 440 bytes, coma vemos na imaxe



¿Qué pasa entón? Algo fixeron no ficheiro para poder acadar esta situación, para poder comprobalo imos a ver as tripas do ficheiro, para iso necesitamos un editor hexadecimal, eu uso ICY Hexplorer, pero calquera valería. Se tes bo ollo poderías decatarte de que ao principio do ficheiro repítese un patrón



Ata que chega a un punto no que cambia a secuencia, e que comeza con 7z. Se non somos tan observadores simplemente se seleccionamos os 440 bytes primeiros do ficheiro e os eliminamos, o ficheiro que nos queda sería o ficheiro que nos interesa, neste caso ao comezar o ficheiro por 7z sabemos que é un ficheiro comprimido e procedemos a abrilo. Aqui aparécenos un ficheiro cab (ficheiros que usa Microsoft para empaquetar arquivos), que procedemos a extraer

Ata aqui todo resultou máis ou menos ben, agora imos á parte difícil.

A imaxe que ven con cab é unha imaxe png, ao abrila dende Windows da erro co Microsoft Photo Editor, co Paint vese unha cousa rara, e vese ben co Visor de Imaxes e Faxes ... está claro que a imaxe ten algo raro ... De tódolos xeitos o que non parece é que haxa nada raro no cab. Seguimos coa imaxe, ten algo raro, en canto temos unha imaxe e seguridade informática en seguida debemos pensar en esteganografía, polo tanto, a buscar programas de esteganografía na web, baixeis varios deles para atopar esa información oculta que busco (openstego, stegdetect), pero non atopan nada na imaxe e incluso dan erro. ¿Qué facemos agora? Pos imos ver a imaxe en bruto, unha vez máis co ICY Hexplorer, a abrimos e analizamos os datos que vemos







Analizando a estructura do ficheiro coa información da Wikipedia, vemos que hay unha sección que non coincide, a que comeza por pSWD, co que xa nos da unha pista do que pode ser, o tamaño que ten o campo é de 16 bytes (o 0x10 que hai xusto diante da cabeceira), co que o valor do campo é 538B327278BBAB654747288999FBCDA1, se eu fixera o reto probablemente tería chegado ata eiqui e esta sería a password que mandaría coma solución.

O caso é que o ficheiro cab que tiña a imaxe non só tiña esa imaxe, senon que gardaba algo máis (velaqui unha lección aprendida, non vaias ao rápido, analiza ben tódolos ficheiros) que en Windows non nos informa diso. Neste caso a xente de reversinglabs teñen unha ferramenta que nos pode axudar NyxEngine, que axuda a detección de esteganografía en ficheiros comprimidos, así que aló imos. Se executamos a ferramenta pasándolle o nos cab coma parámetro obtemos a seguinte saída

D:\NyxEngine\SDK\Bin\NyxConsole>NyxConsole.exe sf puzzle.cab
-- NyxConsole 1.0 from ReversingLabs Corporation --
www.reversinglabs.com

Usage NyxConsole [sf|sfi|vf|rf] InputArchive.ext

[x] Detected archive: CAB
[x] Total number of disks: 0000
[x] Current disk number: 0000
[x] Total number of files: 00000000
[x] Number of files in current disk: 00000001
[+] File 0000: ReversingLabs.png
Compressed size: 00000000
Uncompressed size: 0000739C
File starts on disk: 0000
Checksum: 00000000
[!] Detected steganography:
Steganography ID: 0x00000b
Description: Detected cloaked data in the archive header!
Rich Description: Unknown issue or no rich description!
[x] Detailed archive inspection:
[!] Detected steganography:
Steganography ID: 0x00000b
Description: Detected cloaked data in the archive header!
Rich Description: Unknown issue or no rich description!
Data start: 0x5a; Data size: 0x0000f6
[!] Detected vulnerability:
Vulnerability ID: 0x00000d
Description: Detected possible attack vector due to data block checksum not being set!
Rich Description: Unknown issue or no rich description!
Data start: 0x52; Data size: 0x000008

O que se ve no resultado é que se detectou data dentro do ficheiro cab que non corresponde co propio cab, indícanos onde comezan (posición 0x5a) eses datos e canto ocupan (0x0000f6, 246 bytes), pois nada, imos ao noso ficheiro cab aberto co editor hexadecimal e seleccionamos os datos que non se corresponden co ficheiro para crear o noso ficheiro, e obtemos o seguinte

UmFyIRoHAM6Zc4AADQAAAAAAAAA8MSAOyRZcWCVhcEFcUfpP4JdbtU2derwgjSYp+BpxVYkWJPDt
Q/TITifo4qO7qyYz+yLpd9+6nkwwxmomWHbHK0Bt6UPHOwL/pEKm6IGXo/5dioeP66Fq5brTldgi
Z7do5bbFjykQIsx6PMCBre4iUJ7jcwrwD2MDs69XwuuHL+fMKy9hDUJQPDEgDskWXFjp6jPWFXoW
VSNb4H1zjQpW

Curioso que tódolos caracteres sexan alfanuméricos, probablemente sexa algún tipo de codificación, a máis probable e base64, co que probamos a ver se ten sentido decodificalo, para iso uso esta web, inda que hai moitas dispoñible polo mundo adiante, o resultado é o seguinte

Rar! �Ιs��
�������
Huumm, comeza por Rar, vaia xa temos unha pista. gardamos o resultado coma un ficheiro con extensión rar, e ao abrilo pídenos un contrasinal. ¿Será o que tiñamos na imaxe? Vaia, pois non, contrasinal incorrecto. Ok, ¿qué máis podemos facer? Porbar se o contrasinal anterior é un hash MD5? Probar en minúsculas? O primeiro punto levaría moito tempo probablemente, lembra KISS, imos probar en minúsculas, voilà, abriunos o ficheiro, e aparécenos outro fichero file, sen extensión, o abrimos e aparécenos este texto

Password is: 9ec4c12949a4f31474f299058ce2b22a
Esta era a password que buscaban no reto, un reto moi interesante e relativamente sinxelo. A ver se dou feito algún máis e pouco a pouco poño as miñas solucións por aqui :D