Friday, June 12, 2020

Bypasseando el anti-ransomware de Windows con un Feature


Ransomware es un tipo de software malicioso que infecta su computadora y muestra mensajes que exigen el pago de dinero, generalmente en Bitcoin, para devolver su información.
En la mayoría de los casos, el pago del secuestro no asegura la devolución de la información.
Windows ha implementado un escudo de protección para evitar que este tipo de malware sea ejecutado en su computadora pero, desafortunadamente, siempre existirá la forma de saltar los controles.


En una corta pero interesante investigación junto con Camilo Galdos, encontramos como evadir esta protección implementada por Windows. El bypass se logró usando su propia librería.
La protección Anti-Ransomware de Windows permite seleccionar una carpeta para protegerla evitando que programas maliciosos modifiquen su contenido. Sin embargo, Microsoft pone en su “lista blanca” los productos de Microsoft para modificar la carpeta. Haciendo uso de la librería Microsoft.Office.Interop es  posible saltar la protección anti-ransomware de Windows y cifrar el contenido de los archivos de cualquier carpeta aunque esté protegida.


Este ejercicio fué probado con dos marcas de antivirus en su versión comercial y no se detectó malware en el ejecutable. 

¿Cómo es el Bypass?


Para la creación del ransomware se utilizó la librería de Microsoft, con el fin de usar las características

de una aplicación de Microsoft Office desde un proyecto;

se utilizó el ensamblado de interoperabilidad primario (PIA).

El PIA permite que el código administrado interactúe con el COM (Microsoft Component Object Model)

de una aplicación de Microsoft Office, esta biblioteca permite interactuar con documentos tales como:

Access, Documentos de texto, Excel, PowerPoint o Word sin solicitar permisos adicionales.

Se utiliza la librería para leer el archivo dentro del proyecto:



Para el cifrado del archivo se creó un objeto de cifrado simétrico configurado con un IV y Key

(datos utilizados para recuperar nuevamente el archivo):



Se cifra el contenido del archivo aplicando cualquier método:



Finalmente, se reemplaza el archivo:


Código fuente: https://github.com/4lexaG/EncryptMethod


Análisis del malware en línea

Se pudo validar que ninguna solución de AV detecta el patrón como ransomware:


¿Cómo minimizar el impacto?

Adquirir una solución de seguridad puede aumentar los niveles de seguridad en una organización

o empresa, sin embargo, existen otros puntos a tener en cuenta para reducir el riesgo de

un ataque de este tipo:

1. Nunca pague el rescate.

2. A nivel tecnológico agregue restricciones/controles adicionales dependiendo de la exposición. (Webfilter, IDS, etc...)

3. Capacite a los empleados o miembros de su organización en temas relacionados conciencia en seguridad.

4. Sé amigo de YARA. 😉

YARA es una herramienta destinada (pero no limitada a) ayudar a los investigadores de malware a identificar y clasificar muestras de malware. 

Para escribir una regla YARA, en su forma más básica, la regla debe iniciar con la palabra ruleseguida del nombre y deberá contar con las siguientes sesiones:

Meta: información adicional de la regla.

Strings: cadenas de texto que pueden usadas en la condición.

*Condition: es una expresión booleana, pueden contener operadores lógicos u o regla como parte de sus condiciones.

En la siguiente imagen se muestra como debe quedar escrita una regla YARA:


Ejecución de reglas para la detección del malware:




 YARA puede ser utilizada en los siguientes casos:

  • Integración con la base de datos de reglas ClamAv
  • Integración con PEiD para verificar qué empaquetador se usó para compilar el ejecutable. 
  • Analizar archivos ejecutables portátiles (PE).
  • Escaner de procesos.

Conclusiones

Es importante mencionar que este comportamiento en Windows, ya es conocido. Muchos LOLBINs

(Living Off The Land Binaries and Scripts) existen que demuestran como windows, en muchas ocasiones, le da privilegios extra a sus propios productos y luego esto permite a atacantes explotar ciertos recursos. 

Las reglas de YARA, si se usan de manera efectiva, pueden ser una herramienta adicional en la lucha

contra el malware. En este caso se utilizó una regla básica enfocada principalmente en la identificación
de firmas de malware a través de la detección de cadenas predeterminadas dentro del ejecutable, pero
este tipo de detenciones se pueden evadir a medida que se crean variantes de malware.
Las reglas avanzadas de YARA se centran en el comportamiento y las características del malware,
como el tamaño y el tipo de archivo. Si bien no es raro que cambien las cadenas dentro del malware,
es mucho más raro que lo haga su comportamiento principal.

Wednesday, April 29, 2020

Android: Buenas Prácticas de Desarrollo

Android es uno de los sistemas operativos para teléfonos inteligentes más populares en la actualidad. Tiene una gran base de consumidores, así como un gran apoyo de la comunidad de desarrolladores, al momento existen 2,885,938 aplicaciones en Google Play.

Google Play cuenta con el programa de mejora de seguridad de aplicaciones “App Security Improvement”. Gracias a este programa Google analiza las aplicaciones en busca de fallos de seguridad, antes de que éstas sean publicadas, en caso de evidenciarse un fallo, se envía una notificación junto con el consejo o recomendación para mitigar la vulnerabilidad.

Así mismo, si usted encuentra un posibles problemas de seguridad en cualquier aplicación, puede notificarlo por medio de la cuenta: security+asi@android.com.

El programa de Google puede facilitarle en la remediación de vulnerabilidades, pero esto será en la etapa de implementación lo cual puede incurrir en gastos adicionales y aumento en tiempos de entrega, a continuación, podrá encontrar las principales estrategias que le permitirán incrementar los niveles de seguridad en su aplicación:

1. Ofuscación del código

¿Qué tan fácil es hacer ingeniería inversa a la aplicación?
Una aplicación Android(.apk) puede contener código Java, Kotlin(compilado a Java), C/C++ (Java NDK), Corona / LUA, PhoneGap.

La ofuscación de código es el proceso de modificar un ejecutable para evitar que este sea fácilmente legible, sin este proceso el código fuente del apk puede es fácilmente legible por cualquier curioso. Un apk no es más que un archivo comprimido.

¿A qué tipo de riesgos podría estar expuesto?

Robo de propiedad intelectual: El código fuente debería ser leído únicamente por el autor o dueño del producto pero esto no siempre es así, y la lógica de programación, arquitectura, dominios etc., puede ser usados/consultados por un adversario que intentará tomar provecho de cada componente.

Privacidad: El código podría exponer datos de licenciamiento, lógica del proceso de activación o mecanismos para evasión de filtros.

Explotación de vulnerabilidades: Un nuevo día revela una nueva vulnerabilidad en componentes o funciones que no se tuvieron en cuenta en el lanzamiento de la aplicación, éstas podrían ser encontradas por medio de un análisis de código estático y explotadas en tiempo de ejecución.

El propósito de la ofuscación es reducir el tamaño de una aplicación acortando los nombres de las clases, métodos y campos, incrementando el nivel de dificultad en una inspección.

Para mejorar este proceso se recomienda usar herramientas de código abierto como ProGuard o comercial como DexGuard.

2. Almacenamiento de datos

El problema de seguridad más común para una aplicación en Android es que otras aplicaciones puedan acceder a los datos que se guardaron en el dispositivo, toda la información sensible requiere métodos de protección adicionales, en Android existen tres formas fundamentales para guardar los datos:

2.1 Almacenamiento Interno: Por defecto, los archivos que se crean en el almacenamiento interno son accesibles únicamente por la aplicación, tenga en cuenta que los permisos dados a otras aplicaciones podrían permitir el acceso a estos datos.

Para proporcionar protección adicional para datos confidenciales, puede cifrar archivos locales utilizando la biblioteca de Seguridad. Esta librería proporciona una implementación de las mejores prácticas de seguridad relacionadas con la lectura y escritura de datos en reposo, La biblioteca utiliza el patrón del generador para proporcionar configuraciones predeterminadas seguras.
Para la gestión de claves, la biblioteca de seguridad utiliza un sistema de 2 partes para la administración de claves: un conjunto de claves que contiene una o más claves para cifrar un archivo o datos de preferencias compartidas. (Almacenadas en SharedPreferences) y una clave maestra que cifra todos los conjuntos de claves (Almacena en Android keystore system).

2.2 Almacenamiento Externo: Los archivos creados en almacenamiento externo, como las tarjetas SD, se pueden leer y escribir a nivel global. El archivo puede ser modificado o eliminado por el usuario o por cualquier aplicación.

Para leer y escribir archivos en el almacenamiento externo de una manera más segura, considere usar la clase EncryptedFile del paquete androidx.security.crypto soportado desde el nivel de API 23+.
Recuerde utilizar la última versión disponible.

2.3 Proveedor de Contenido: Los proveedores de contenido ofrecen un mecanismo de almacenamiento estructurado que puede limitarse a su propia aplicación o exportarse para permitir el acceso de otras aplicaciones, esto puede ser configurado a través del atributo: android:exported.

Recuerde tener presente el principio de menor privilegio.

3. Criptografía

La criptografía también se puede utilizar para proteger los datos del usuario, Android tiene dos métodos para el cifrado del dispositivo:

3.1 Cifrado basado en archivos: A partir de Android 7.0 se admite el cifrado basado en archivos (FBE), el cual permite cifrar diferentes archivos con diferentes claves que se pueden desbloquear de forma independiente.

3.2 Cifrado utilizando el cifrado de disco: Este proceso codifica todos los datos del usuario en un dispositivo Android, utilizando claves de cifrado simétricas, todos los datos creados por el usuario se encriptan y se desencripta automáticamente antes de enviarlo o leerlo en el disco.

El paquete javax.crypto proporciona las clases e interfaces para operaciones criptográficas. Las cuales incluyen el cifrado, la generación de claves y código de autenticación de mensajes (MAC).
Las clases facilitan la implementación de cifrados simétricos, asimétricos, de bloque y de flujo tales como: AES, AES_128, AES_256, ARC, BLOWFISH, ChaCha20, DES, DESede, RSA.

4. Permisos de las aplicación

Las solicitudes para acceder a información confidencial, sólo deben realizarse cuando el acceso es necesario para el funcionamiento de su aplicación.
Android permite configurar los permisos de las aplicaciones, la aplicación debe publicar los permisos que requiere en la etiqueta <uses-permission> del manifiesto de la aplicación.

Al trabajar con permisos en Android se recomienda seguir los siguientes principios:
4.1 Sólo use los permisos necesarios para que su aplicación funcione.
4.2 Verifique los permisos requeridos por las bibliotecas.
4.3 Sea transparente (Tenga claro a qué está accediendo y porqué)
4.4: Haga que el acceso al sistema sea explícitos e informativo.

Recuerde agregar los permisos requeridos para el correcto funcionamiento de la aplicación.

5. Protección de aplicaciones en tiempo de ejecución

Herramientas como DexGuard protege las aplicaciones contra ataques en tiempo real, evitando que atacantes recopilen conocimiento sobre su comportamiento y lo modifique en tiempo de ejecución.
Implementa detección de herramientas de depuración, emuladores, dispositivos rooteados, marcos de ocultación de raíz y manipulación.


Finalmente, al desarrollar una aplicación recuerde cumplir con las políticas establecidad por Google:

Referencias:
Android Security, Attack And Defenses, Abhishek Dubey | Anmol Misra
Android Developers, Docs Guides https://developer.android.com/topic/security/best-practices
Centro de política del desarrollador: https://play.google.com/about/privacy-security-deception/

AppBrain, Android Statistics https://www.appbrain.com/stats/number-of-android-apps

Tuesday, April 7, 2020

DeepCTF Writeup

WEB Challenges
Oh JS! 120
This is the most secure login form on earth.
We use SECURITY BY OBSCURITY in order to prevent hackers from finding our flags.
I dare you to login.
Seeking in the page's source code we can see a obfuscated code which look like:
function validate() { [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])
[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+
[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+
[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])
[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+...

JSFuck is an esoteric and educational programming style based on the atomic parts of JavaScript.
It uses only six different characters to write and execute code.
By decoding this code, credentials are obtained to enter the website

if (document.forms[0].username.value == "corb3nik" && document.forms[0].password.value == "chickenachos") document.location = "4d4932602a75414640946d38ea6fefbf.php"
So that we got our flag:

Did You Got Trolled? 120
An army of hackers has stolen the flag from our rabbits. Security experts have failed to capture
the flag and some have even gone mad.
Please…GIMME THE FLAG!!


Comments in the code can be good development practice, but sometimes they reveal
filenames, links, usernames or, in this case, our key1:
/*
* What is this doing here?
* Key1 = gimme0x…...
*/

Each post directs redirect to the following URL: http://140.238.254.6:8005/post.html again,
looking in the source code we get a hint:
<span class="subheading">deep.php?page=debug.html</span>
<!--Creds in /home/ubuntu/key2.txt -->

So, with LFI we got our second key:

with these values we obtained the flag:
     



Nothing is Impossible 160
One of our rabbits has lost the keys of his server to access his flag.
He is crying desperately as he only remembers that the flag was in the path: /tmp/flag.php
but he don’t know how to get there. Our friend BugsBunny was performing reconnaissance
tasks when suddenly found a web that could help you, please bring me back his flag.
Author; whitex
In this challenge, we know it’s about LFI the first step is to check if file exists:


and then I tried to get the file’s content:

Apparently it is an LFI but the server but the inclusion was done using the
require_once function of PHP, hence, I used cURL to bypass this filter so that I could read the flag:



CRYPTO Challenges
WarmUp 50

Get Ready For Crypto Fight. Here A Challenge Just For Your WarmUp.
File: w4rmup.txt
Content: 64 33 33 70 01111011 01001010 01110101 00110101 01110100 01011111 00110100 0101111101001110 00110000 01110010 01101101 00110100 01101100 95 67 104 52 108 108
95 95 111 163 156 140 164 137 61 164 77 175
Solution: In order to get the flag the text was decoded using HEX, Binary, and Ascii Table
d33p{Ju5t_4_N0rm4l_Ch4ll__Isn`t_1t?}

Ali3nAgain 100
SPD force needs your help again...!!!!
Flag Format: d33p{UPPERCASE}
File: spdvsalien.png
Solution: Usehttps://www.dafont.com/es/futurama.font
d33p{POWERRANGERSPDFORCEWON}

WierdText 100
I Need A New Keyboard..!!
File: w1erdc1ph3r.txt
Content: c4co"Lct5-vec+H2efw)G-"Ve+$2;5zeef+
Solution: Keyboard Shifting Cipher consists in typing a letter close to another on a computer keyboard. The shift can be on the right, the left, up or down.
d33p{K3yb04rd_N33ds_T0_B3_R3p41r3d}

MISC Challenges

Weirdo 120

We got some wierdo text, we need to decode it to read the secret flag. I think you can do it.
I tried my best but didn't get anything.
File: w1erdc1ph3r.txt
Content: 5nd33p44d33p4qd33p7nd33p63d33p48d33p74d33p79d33p4qd33p48d33p51d33p78d33p4
qd33p31d33p39d33p69d33p4rd33p48d33p4rd33p6pd33p4rd33p6nd33p52d33p66d33p62d33p44d33
p46d33p6qd33p4qd33p33d33p30d33p3q
Hint: 13 - 0x - 64
Solution: In order to get the flag the text was decoded using ROT13, HEX and Base64


OSINT Challenges
History 80
Where did it happen?
'Drunk Hackers'
P.S. Hackers love that place
Flag format - d33p{xxxxxx}
Solution: Drunk Hackers History is a famous space at DefCon @DrunkHackerHist
d33p{defcon}

Sunday, May 26, 2019

OEA CyberWomen Challenge

On 25th of May, the CyberWomen Challenge was held, sponsored by the OAS and TrendMicro.
For the activity, a series of challenges were designed on the FBCTF platform, the theme was based on an attack that was being carried out and different security mechanisms had to be planned and implemented to block different types of attacks.

Each challenges was divided by country, below you can see the solution to the last challenge:

ARGENTINA

Unfortunately none of us did kid...
This has to be confirmed, though, but if it turns out to be true, then we have a malicious insider and he or she may even be in this very war-room hearing everything we're doing to stop this.
Look... we had to bring back the guys from Trend Micro. They connected a device called Deep Discovery Inspector which can detect suspicious activity and this thing came up just in time. It is some kind of spam or phishing email that was tagged by this DDI. The weird thing is that the recipient is a user that left the company a couple of months ago.

The mail admin showed evidence that the mailbox was in fact disabled/deleted at that time, but somehow "someone" enabled the mailbox again from inside the company. I don't have to tell you that Karen, the mail admin has been isolated and is right now been investigated.
I've sent Carlos to give you a USB pendrive (he doesn't know what it contains). Copy the file in C:\Users\Administrator\VirtualBox\suspiciousEmail.d4a on your pivot machine.

I couldn't get a copy of the mail but I managed to get the SMTP conversation where the mail was transmitted, before access to the DDI console was closed (to only Trend and members of the Board).
I need you to get me as much information from that mail as you can. It is supposed to have some sort of Trojan or Rootkit attachment, you can use Deep Security again to see if it can detect it. It can also tell us who is behind this attack and what will be their next step...
This information is now Top Secret, call me when you're done and don´t tell anyone what you're doing.

::FLAG::USE THE FOLLOWING SYNTAX:
MALWARE DETECTION NAME FROM DEEP SECURITY:PASSWORD FOR THE ZIP FILE:NAME OF THE HACKERS OPERATION:NAME OF THE SUPPOSED TRAITOR


Solutión:

I took the copy of the email that was obtained from the pivot server (pivot7.cyberwomen.rootrenders.co) and analyzed it on a local machine: The first thing I tried to do was run the command strings to see what was obtained from the mail, the headers and an encrypted text are observed:





This address led us to pastebin where we found another encrypted text (Meeting information):


Converting characters from Base64 gives the following clear text:


In this case it is evident that probably it have a txt file, this file was exported to zip to try to crack the password:

Without satisfactory results, I analyzed the email headers again parsing the Message-ID parameter of suspicious.pd4 I could see a weird format, converting this text from hex I got:

Converting the hex text I got:


Now, from base64:


Finally, I got the zip's password:


Reading the appointment file I got another text with hex data:

Converting from hex file, It return another Base64 text:


Converting from Base64, I got another hex data:


Converting from hex data, I got another base64 data:


Converting from base64,  I got another hex data:
And finally I got the first part of the flag:


::FLAG::USE THE FOLLOWING SYNTAX:

MALWARE DETECTION NAME FROM DEEP SECURITY:PASSWORD FOR THE ZIP FILE:NAME OF THE HACKERS OPERATION:NAME OF THE SUPPOSED TRAITOR

Supposed traitor: Sophia

Operation name: OL****

Password for zip: Y0u***

To get the malware detection name I used VirusTotal in order to analized the malware sample:
and the name of the malware detected by TrendMicro is: R****A

So that I got the flag:

R****A:Y0u***:OL****:Sophia

And with this flag We won the CTF :)

Thanks to @TrendMicro and @OEA_Cyber

Monday, February 25, 2019

Pruebas de seguridad para minimizar amenazas en aplicaciones

Para la mayoría de las compañías, el momento de realizar o contratar pruebas de seguridad de la información asociados al análisis de aplicaciones (DAST) y/o evaluación de código (SAST) es cuando se produce un incidente de seguridad; esto se debe a que en la mayoría de casos no existe un apoyo técnico entre las áreas de seguridad y el equipo de desarrollo durante las fases del ciclo de vida del desarrollo de software (SDLC).
En la academia, generalmente  las materias de programación están enfocadas en el desarrollo funcional y poco se tienen en cuenta los aspectos de seguridad en el ciclo de vida del desarrollo,  este problema es evidenciado con frecuencia en entornos productivos. ¿Alguna vez se han preocupado en revisar si el desarrollo realizado puede comprometer los datos de la compañía, sus clientes o empleados?
De acuerdo con el reporte “Web Application Vulnerability 2019” de Acunetix, las vulnerabilidades en las aplicaciones web se convierten en amenazas críticas para una compañía.
De un escaneo realizado sobre 10.000 sitios web se encontró que el 46% de estos contienen vulnerabilidades de severidad alta y el 87% contienen vulnerabilidades de severidad media.
A continuación se ilustra los tipos de vulnerabilidad encontrados en la categoría de severidad alta:
Fuente: Acunetix
Por esta razón y preocupados por la seguridad en las aplicaciones web, a continuación, mencionamos puntos básicos o controles de seguridad que deberían estar implementados junto con las pruebas de software ya conocidas en la industria (unitarias, integración, funcionales, rendimiento):
1. Validación de datos de entrada y salida:
La incorrecta validación de datos es la principal causa de las vulnerabilidades en aplicaciones web (OWASP Top 10 2017-A1). Todas las entradas de datos en las aplicaciones deben ser inspeccionadas, el objetivo de estas pruebas es conocer si existe un punto de entrada para la ejecución de ataques como XSS, inyección SQL, direccionamiento abierto y manipulación de parámetros.
2. Identificación, autenticación y control de acceso
Falencias en la configuración del proceso de autenticación y gestión de sesión permite a un atacante comprometer usuarios, contraseñas o explotar fallas de implementación para asumir otra identidad.
En este punto se recomienda revisar el cumplimiento de la política de contraseña segura, el uso del doble factor de autenticación (si se requiere) y el acceso a cada uno de las opciones de la aplicación con y sin autorización.
Más información:
3. Métodos de Cifrado
El objetivo es proteger información confidencial o sensible, por lo cual, se debe identificar la necesidad de proteger los datos en tránsito y almacenamiento.
• ¿Hay datos que se transmiten en texto claro?
• ¿Se utiliza un algoritmo criptográfico obsoleto o débil?
• ¿Es necesario que todos los datos sensibles sean almacenados? ¿Están cifrados?
4. Uso de componentes externos
Todas las aplicaciones y servicios web que utilizan componentes externos (API, librerías, entre otros) heredan las vulnerabilidades que pueda tener dicho componente. Por esta razón, se recomienda verificar que estos componentes se carguen de fuentes confiables y que cuente con mecanismos de verificación de integridad.
5. Aseguramiento de bases de datos
Para que exista un correcta administración de la base de datos, en términos seguridad, se debe mantener la integridad evitando datos duplicados, faltantes, alterados o incorrectos, para ello se debe contar con:
• Triggers (disparadores) y procedimientos almacenados
• Gestión de perfiles y acceso de usuarios
• Consultas parametrizadas
• Validación de datos y caracteres nulos
6. Protección de datos personales y sensibles
Los datos personales hace referencia a toda aquella información asociada a una persona y que permite su identificación.
Se debe verificar el acceso a la aplicación y que el dueño de la información sea el único que pueda ver, actualizar y/o eliminar sus propios datos.
Conclusiones:
• La implementación de pruebas de seguridad desde la fase del desarrollo, aseguran que el producto final resulte seguro para los clientes y gran parte de los costos se reducen al evitar múltiples ciclos de pruebas y parches.
• Para la ejecución de las pruebas se requieren de conocimientos en seguridad por esta razón, se recomienda contar con el apoyo de un profesional en el tema.
Glosario: