Programming high performance network security tools



Documentos relacionados
HTTP Introducción. Redes de Datos Ing. Marcelo Utard / Ing. Pablo Ronco FACULTAD DE INGENIERIA UNIVERSIDAD DE BUENOS AIRES

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

Desarrollo y servicios web

ARQUITECTURAS CLIENTE/SERVIDOR

Arquitecturas cliente/servidor

Hacking Ético. Módulo II Fase 2: Técnicas activas de obtención de información: Escaneo

TUTORIAL NODE.JS POR DARÍO FERNÁNDEZ A. PARA EL CURSO DE DESARROLLO Y SERVICIOS WEB PROFESORA LUISA FERNANDA RINCON PEREZ OCTUBRE 10 DEL AÑO 2014

PROYECTO INTEGRADO CLUSTER DE ALTA DISPONIBILIDAD CON HAPROXY Y KEEPALIVED. Antonio Madrena Lucenilla 21 de Diciembre de 2012 I.E.S.

COMUNICACIÓN ENTRE PROCESOS SOCKETS

Desarrollo Web en Entorno Servidor

Servicio de publicación de información web (HTTP)

Documentación Técnica Conector

ATAQUE CON SLOWLORIS A SERVIDORES APACHE VULNERABLES

Actualizaciones de GateDefender Performa desde un servidor web local

WEB Y HTTP. HTTP: Hypertext Transfer Protocol [RFC 1945] [RFC 2616] Web Page URL (Uniform/Universal Resource Identifier)

Instalación, creación y configuración del servicio FTP

INTRANET: MANUAL DE INSTALACIÓN

PROGRAMACIÓN PÁGINAS WEB CON PHP

Quiz 11: Crear preguntas. Juan Quemada, DIT - UPM

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

Node.JS: Plataforma de fácil programación de servidores para aplicaciones de red escalables

Laboratorio de Desarrollo Software

PROGRAMACIÓN EN PHP. 1. Identificar las características y modalidad de programación bajo PHP.

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

El servidor Web Tema 2.- Nivel de aplicación en Internet

DIPLOMADO EN SEGURIDAD INFORMATICA

Windows Server 2012: Infraestructura de Escritorio Virtual

Guía de instalación y configuración de IBM SPSS Modeler Social Network Analysis 16

INSTALACIÓN DE MySQL SERVER EN WINDOWS

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

Tekla Structures Guía Rápida de Licencias. Versión del producto 21.1 agosto Tekla Corporation

MANUAL CONFIGURACIÓN DDNS DIGIPLEX. Registro de dominio Configuración DDNS en DVR Configuración P2P o NAT Configuración SuperLivePro

ANEXO D Manual de Técnico MANUAL TECNICO PROMO APP PROMO PLATFORM PROMO API PROYECTO FINAL

Almacenamiento virtual de sitios web HOSTS VIRTUALES

Solución de actividad 2.2.5: Uso de NeoTrace para ver Internetworks

XPERTO EN DISEÑO DE PÁGINAS WEB

Arquitectura de sistema de alta disponibilidad

Práctica 1: sockets en Python

DBSURE. Disponemos de una copia de la base de datos de forma remota, que podemos contabilizar como segundo juego de copias.

Módulos: Módulo 1. El núcleo de Linux - 5 Horas

Documento de implementación Servidor Web. Proyecto Laboratorio de Redes

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

REQUISITOS DEL SISTEMA. Software Servidor. Cliente. Hardware Servidor. Cliente

Tutorial: Primeros Pasos con Subversion

JOOMLA 2.5 MANUAL USUARIO Gestión de Usuarios

Escáner de puertos. Módulo 11: Seguridad Informática: Estudio del caso de las Comunicaciones Móviles

Protocolo HTTP Apache. Servicios HTTP. Esteban De La Fuente Rubio L A TEX. Universidad Andrés Bello. 17 jun 2011

Instalación de R.

Clase 22 Nivel de Aplicación WWW Tema 6.- Nivel de aplicación en Internet

TUTORIAL ACADÉMICO. Programación II- Taller de Programación I Fa.CENA. UNNE

Almacenamiento virtual de sitios web HOST VIRTUALES

Sophos Anti-Virus para Mac OS X, versión 4.9 guía de inicio. Para Macs en red con Mac OS X

Juan de Dios Murillo Morera Santiago Caamaño Polini INTRODUCCIÓN

Manual De Instalación MySQl 5.1 MANUAL DE INSTALACIÓN Y CONFIGURACIÓN DE MYSQL

MANUAL DE USUARIO PARA LA INSTALACION DE LOS AGENTES COMMVAULT SIMPANA 9.0

Luis Villalta Márquez

Este proyecto ha sido cofinanciado por PROFIT.

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

Popularidad comparada de PHP vs ASP, y posibles causas

Funcionamiento de Servicios Web, FTP

Studium, Campus Virtual de la Universidad de Salamanca.

WINDOWS SERVER 2008 CORE

MANUAL DE USO FILEZILLA

CONFIGURACIÓN DEL SERVIDOR

Implantar Microsoft Software Updates Service (SUS)

Network Services Location Manager. Guía para los administradores de redes

Introducción a las Redes de Computadoras. Obligatorio

WINDOWS : TERMINAL SERVER

QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)

ORBERE. Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE

GESTOR DE LICENCIAS Ayuda

Dossier de prácticas

Instalar y configurar W3 Total Cache

General Parallel File System

IS23 Mantenimiento de Instalaciones Informáticas Práctica 7. Análisis de redes

INSTALACIÓN DE LICENCIAS EN RED. Descripción del Procedimiento

[Un framework de test de intrusión web]

Tutorial BMS Server Studio UDP

Desarrollo y servicios web

La importancia de las pruebas de penetración (Parte I)


ISCAN - MANUAL DE INSTALACIÓN

Introducción a PHP. * No es necesario declarar previamente las variables.

1. Definición de puerto 2. Sockets 3. Conceptos cliente/servidor 4. Definición de Stream 5. Concurrencia, multiprogramación y multitarea 6.

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

Navegadores y páginas web

Instantáneas o Shadow Copy

Instalación de XEN Información de XEN Qué es XEN? Componentes de XEN:... 2

servicios. El API es definido al nivel de código fuente y proporciona el nivel de

Marcos de Desarrollo. Diseño e implementación de aplicaciones Web con.net

Instalación de IPv6 en plataformas FreeBSD

Software Intel para administración de sistemas. Guía del usuario del Paquete de administración de servidores modulares Intel

Servidores Web (II) Contenidos

10. El entorno de publicación web (Publiweb)

Instalación y configuración del servidor FTP Filezilla en Windows 2003 Server. Vicente Sánchez Patón I.E.S Gregorio Prieto.

El servidor WEB Apache HTTPD. Tecnologías Web

Windows Server 2012 Manejabilidad y automatización. Module 3: Adaptación del Administrador de servidores a sus necesidades

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Manual de usuario Versión: 1.3 Edición: 05/02/2015 1

Transcripción:

Programming high performance network security tools Using non-blocking I/O (node.js) Jaime Peñalba Estébanez @NighterMan

Que es node.js? node.js es un conjunto de bindings para la VM de javascript v8 (google chrome). Permite crear programas que realizan operaciones de I/O utilizando javascript. Esta orientado al alto rendimiento

Que es node.js? node.js no es un lenguaje de programación, el lenguaje es Javascript. node.js es a la vez un API y el runtime/interprete

Ryan Dahl Creador de Node.JS

Un ejemplo rápido 2000 requests 1000 clientes concurrentes 1 megabyte de respuesta nginx 3000 req/sec node 2800 req/sec apache 100 req/sec

Un ejemplo rápido: El código 1 var http = require('http'); 2 var fs = require('fs'); 3 4 var data = fs.readfilesync('file.rand'); 5 6 http.createserver(function (req, res) { 7 res.writehead(200); 8 res.end(data); 9 }).listen(8282);

Un ejemplo rápido: Consideraciones No todo es lo que parece... nginx con opciones de cache desactivadas nginx ha consumido ~4mb de ram node ha consumido ~60mb de ram

I/O en la actualidad Es normal encontrar código como este 1 result = query('select * from T'); 2 //use result Qué está haciendo el programa mientras espera la respuesta de la base de datos?

I/O en la actualidad Es normal encontrar código como este 1 result = query('select * from T'); 2 //use result Normalmente ESPERAR

Latencia: Ordenadores actuales Cache L1: 3 ciclos Cache L2: 14 ciclos RAM: 250 ciclos Disco: 41.000.000 ciclos Red: 240.000.000 ciclos

Latencia: Ordenadores actuales Cache L1: 3 ciclos Cache L2: 14 ciclos RAM: 250 ciclos No Blocante Disco: 41.000.000 ciclos Red: 240.000.000 ciclos Blocante

I/O en la actualidad El mejor software es el software multi tarea. Otros hilos pueden seguir ejecutándose mientras se espera a que otras tareas terminen.

I/O en la actualidad De verdad esperar y usar hilos es la mejor solución? Veamos el caso de Apache y NGINX

Apache vs NGINX reqs/sec

Apache vs NGINX memory 1

Apache vs NGINX diferencias Apache utiliza un hilo por conexión NGINX no utiliza hilos. Utiliza un event loop

I/O en la actualidad Cambiar de contexto no es gratis para el procesador El stack de cada hilo consume memoria Para concurrencia masiva, utilizar un hilo de sistema por cada conexión no es una buena opción. El modelo de concurrencia por hilos esta obsoleto.

I/O en la actualidad: Ejemplo Código como este 1 result = query('select * from T'); 2 //use result Bloquea el proceso o implica el uso de hilos y por lo tanto varios stacks de ejecución

I/O en la actualidad: Ejemplo Async 1 query('select ', function (res) { 2 //use result 3 }); De esta forma se permite continuar con la ejecución del programa de forma inmediata y solo se llamara al código encargado de manejar el resultado cuando este este listo. No hacen falta ni ningún otro tipo de trucos.

Lo que nos han enseñado 1 puts("enter your name: "); 2 var name = gets(); 3 puts("name: " + name); Nos han enseñado a pedir datos y a no hacer nada hasta que obtenemos el resultado.

Lo que nos han enseñado 1 puts("enter yout name: "); 2 gets(function (name)) { 3 puts("name: " + name); 4 }); 4 // Hacer otras cosas Algo así nos parece demasiado complicado.

Como funciona node: Arquitectura (old) Node.js Core Library (JavaScript) Node.js Bindings (C++) V8 (C++) Thread Pool (libeio) (C) Event loop (libev) (C)

Como funciona node: Arquitectura Node.js Core Library (JavaScript) Node.js Bindings (C++) Google V8 (C++) Libuv (C)

Libuv: Unicorn Velociraptor Librería enfocada a async I/O Desarrollada para node.js pero usada también en Rust, Luvit, Julia, pyuv y otros. Event loop utilizando epoll, kqueue, IOCP y event ports Soporte de sockets tcp/udp Operaciones de manejo de ficheros asíncronas Thread pool

Como funciona node: Event Loop http://www.aaronstannard.com/post/2011/12/14/intro-to-nodejs-for-net-developers.aspx

Como funciona node: Event Loop Cola de Eventos Evento 1 Event Loop Evento 2 Evento 3... Callback Código JavaScript Async call Código Async del OS epoll, kqueue, threads, timers, I/O completion ports, etc...

Como funciona node: Diseño Todo se presenta como un Stream para evitar almacenar datos Las funciones no deben de realizar I/O de forma directa, siempre debe de usarse un callback. La capa de JavaScript utiliza un solo hilo La capa de C/C++ es multihilo

Por qué no usa todo el mundo event loops? Los event loops mono hilo necesitan que todas las operaciones de I/O sean no blocantes. Si una operación es blocante, se bloquea el event loop. La mayoría de las librerías actuales son blocantes.

Identificar operaciones que realizan I/O NO hay I/O 1 b = a(); SI hay I/O 1 a(function (b) { 2 // handle result 3 });

Módulos: Core Modules Assertion Buffer Child Processes Cluster Console Crypto Debugger DNS Path Process Punycode Query Strings Readline REPL Stream String Decoder DNS Domain Events File System HTTP HTTPS Modules Net OS Timers TLS/SSL TTY UDP/Datagram URL Utilities VM ZLIB

NPM

NPM: Node Package Manager Gestor de paquetes por defecto Incluido con node desde la versión 0.6.3 Permite instalar programas o módulos disponibles Permite publica módulos

NPM: Inicializacion

NPM: package.json 1 { 2 "name": "taller", 3 "version": "0.0.1", 4 "description": "Programa de prueba", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "author": "Jaime Peñalba", 10 "license": "GPLv3" 11 }

NPM: Instalar modulos npm install express npm install express -g npm install express --save

NPM: Instalar modulos

NPM: Instalar modulos 1 { 2 "name": "taller",... 6 "scripts": { 7 "test": "echo \"Error: no test \" && exit 1" 8 }, 9 "author": "Jaime Peñalba", 10 "license": "GPLv3", 11 "dependencies": { 12 "express": "^4.9.5" 13 } 14 }

NPM: Instalar dependencias $ npm install

NPM: Node Package Manager Muchas más funcionalidades Actualizar módulos Listar, eliminar módulos Scripts de post instalación Arrancar/parar programa

Basics

Funciones en javascript 1 function foo(a) { 2 console.log("hola"); 3 } 4 settimeout(foo, 2000); Función Función anónima 7 settimeout(function (a) { 8 console.log("hola"); 9 });

Funciones en javascript: como argumento 1 function foo(a) { 2 console.log("hola"); 3 } 4 settimeout(foo, 2000); 7 settimeout(function (a) { 8 console.log("hola"); 9 });

Funciones en javascript: como argumento Estamos pasando la función como argumento settimeout(foo, 2000); Estamos pasando el resultado de la ejecución de la función como argumento settimeout(foo(), 2000);

Callbacks Un callback es una función que se pasa como argumento de otra función y que se ejecuta en un momento determinado. No es un tipo de dato ni una propiedad especifica del lenguaje, sino una técnica de programación. Se puede realizar en otros lenguajes como en C.

Callbacks: Ejemplos 1 var http = require('http'); 2 3 http.get('http://..', function (response) { 4 console.log("la respuesta es: " + 5 response.statuscode); 6 });

Callbacks: Ejemplos 1 var http = require('http'); 2 3 function handleresponse(response) { 4 console.log("la respuesta es: " + 5 response.statuscode); 6 } 7 8 http.get('http://...', handleresponse);

Callbacks: Ejemplos 1 var child = require('child_process');; 2 3 child.exec('ls -al /', function (err, stdout) { 4 console.log(stdout); 5 }); 6 7 console.log("hello");

Módulos: Importar var http = require( http ); var http = require(./mymodule );

Módulos: Crear 1 function foo(a) { 2 console.log("arg is " + a); 3 } 4 5 exports.foo = foo; 1 var test = require('./module'); 2 test.foo();

API Básico

Módulo: http http.request(options, [callback]) http.get(options, [callback]) http.createserver([requestlistener])

Módulo: http (options) var options = { hostname: 'www.google.com', port: 80, path: '/upload', method: 'POST', headers: { 'User-Agent': 'morzilla', 'Cookie': 'USERID: algo' } };

Módulo: http (events) on('data', function () {}) Hay nuevos datos disponibles para leer en la respuesta del servidor o en el request del cliente (dependiendo de si somos cliente o servidor) on('end', function () {}) Se ha terminado el request del cliente o la respuesta del servidor on('error', function () {}) Ha ocurrido un error

Módulo: net net.createconnection(port, [host], [connectlistener]) net.connect(path, [connectlistener]) net.connect(options, [connectionlistener]) net.createconnection(path, [connectlistener])

Módulo: net (options) For TCP sockets: port: Port the client should connect to (Required). host: Host the client should connect to. localaddress: Local interface to bind to for connections. For UNIX domain sockets: path: Path the client should connect to (Required).

Módulo: net (events) on('data', function () {}) Hay datos nuevos disponibles para leer on('close', function () {}) Se ha terminado la conexion on('connection', function () {}) Se ha conectado un nuevo cliente o se ha conectado con el servidor on('error', function () {}) Ha ocurrido un error

Prácticas

Prácticas: Chat 1 var net = require('net'); 2 3 var sockets = []; 4 5 var s = net.server(function(socket) { 6 sockets.push(socket); 7 socket.write("welcome to the chat\n"); 8 9 socket.on('data', function(d) { 10 for (var i = 0; i < sockets.length; i++) { 11 if (sockets[i]!== socket) 12 sockets[i].write(d); 13 }; 14 }); 15 16 socket.on('close', function() { 17 var i = sockets.indexof(socket); 18 sockets.splice(i, 1); 19 }); 20 21 }); 22 23 s.listen(6667);

Prácticas: Escaner de puertos 1 var net = require('net'); 2 3 var host = process.argv[2]; 4 5 function checkport(port) { 6 var socket = net.connect(port, host); 7 8 socket.on('connect', function(){ 9 console.log(port + "/tcp is Open"); 10 socket.end(); 11 }); 12 13 socket.on('error', function(err){ 14 socket.destroy(); 15 }); 16 } 17 18 for (var i = 0; i < 1000; i++) 19 checkport(i);

Prácticas: Bruteforce web 1 var http = require('http'); 2 var fs = require('fs'); 3 4 var file = fs.readfilesync(process.argv[3]).tostring(); 5 var folders = file.split('\n'); 6 7 http.globalagent.maxsockets = 300; 8 9 folders.foreach(function (folder) { 10 http.get(process.argv[2] + folder, function (res) { 11 if (res.statuscode!== 404) { 12 console.log("/" + folder + ": " + res.statuscode); 13 } 14 res.socket.end(); 15 }); 16 });

Prácticas: Server web 1 var http = require('http'); 2 var fs = require('fs'); 3 4 5 http.createserver(function (req, res) { 6 res.writehead(200, {'Content-Type': 'text/html'}); 7 res.end("mi color favorito es el jamon"); 8 }).listen(8282);

Prácticas: r2pipe 1 var r2pipe = require('./lib/r2pipe'); 2 3 4 r2pipe.pipe('/bin/ls', function (r2) { 5 r2.cmd('pdj 20 @ entry0', function (res) { 6 var results = JSON.parse(res); 7 8 for (var i = 0; i < results.length; i++) { 9 var addr = results[i].offset.tostring(16); 10 console.log("0x" + addr + ": " + results[i].opcode); 11 }; 12 r2.quit(); 13 }); 14 });

Misc

Modulos utiles SoupSelect htmlparser Async Express r2pipe

Algunas ideas de herramientas Bruteforce logins, dirs o fuzzer Generador de informes Parser de herramientas automáticas Mass scanner Buscador de virtual hosts Helpers de explotación utilizando radare Downloaders de reddit, 4chan, etc... Registros automaticos Simuladores de clicks / visores de publicidad

Recursos interesantes http://www.nodejs.org/api/ http://www.nodebeginner.com http://www.strongloop.org Ryan Dahl: Cinco de node https://www.youtube.com/watch?v=m-sc73y-zqa Ryan Dahl: Intruction to node.js https://www.youtube.com/watch?v=jo_b4lthi3i