Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - DUDA

#1
Dudas y pedidos generales / Recomendaciones de VPN 2020
Septiembre 12, 2020, 11:17:10 PM
Hola! algua buena VPN que estén usando ahora? (paga o free) No tienes permitido ver los links. Registrarse o Entrar a mi cuenta me está decepcionando los últimos meses, su red está muy lenta y hay páginas que no tengo acceso. Alguna referencia de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta tambien?

Gracias por leer,
DUDA
#2
Hola!! estoy buscando poder realizar ingeniería inversa a una tool que desarrollamos en mi empresa hace un buen tiempo, hemos perdido el codigo fuente...  :'(

Algún experto en ingenieria inversa para un .MSI que fue desarrollado en c#? Los leo!! Será pagado.

Gracias por leer,
DUDA
#3
Hola a todos, hace poco hackearon mi servidor cPanel/WHM y movieron a mis clientes y su data a otro servidor cPanel/WHM, estoy buscando obtener las llaves de acceso del servidor cPanel/WHM, si alguien puede brindar ayuda escribirme al MP. Sera con pago $

Saludos,
DUDA
#4
Hola, llevo años trabajando con Glassfish como servidor web para Java, creo que es buen momento para migrar a otra plataforma.

Se agradece sus recomendaciones y el sustento del porqué.

Actualmente mi equipo desarrolla aplicaciones Java compiladas en .WAR.

Gracias por leer,
DUDA
#5
Dudas y pedidos generales / Arquitectura ARM
Noviembre 13, 2018, 06:04:27 PM
Hola, estoy necesitando ejecutar una librería en la arquitectura ARM, alguien tiene alguna guía (que funcione) para lograr emular esto?

Quizá también alguna otra forma de lograrlo.

Gracias por leer,
DUDA
#6
Hola, alguien que conozca algun furo donde traten temas de BI? Estoy montando mis pruebas de concepto, ya tengo mi ETL y Data Mart, sin embargo no encuentro herramientas open source de reporting como Power BI o Quicksight de AWS.

Gracias por leer,
DUDA
#7
Hola amigos de lo imposible, acabo de comprarme una thinkpad T470s con Win10 Pro, soy usuario de Linux así que decidi pasarme de Manjaro a Arch Linux.

He seguido la guía de arch, diversos manuales en internet e incluso guias de instalación del foro al pie de la letra, pero despues del primer paso reiniciar y quitar usb booteable no he podido levantar el OS, obtengo las siguientes pantallas:





Por último estas 3 opciones, al hacer clic al disco y/o windows boot manager se repite el bucle:



Así está mi BIOS:







Estás son mis particiones, me asegurÉ de tener la particion de bios boot:



Tras fracasar en la instalación de Arch Linux decidí instalar mi ya conocido Manjaro (el cual me se el procedimiento a ojos cerrados). Pero el problema es el mismo, quizá es alguna configuración en la BIOS?

Su ayuda, llevo dos semanas sin solucionarlo.

Graciaas por leer,
DUDA
#8
Hola!! estoy por renovar mi terminal (laptop HP) y tengo estas dos opciones, soy usuario linux (manjaro) y desde allí administro servidores linux (shell y control panel) así que lo único que necesito es la terminal y un browser, tanto Apple y Lenovo la ofrecen. ¿Cuales son sus opiones de estos terminales?

Caracteristicas ThinkPad T570 | $1,988.10
Processor : Intel Core i7-7600U Processor (4M Cache, up to 3.90 GHz)
Operating System : Windows 10 Home 64
Operating System Language : Windows 10 Home 64 English
Display Panel : 15.6" UHD (3840x2160), non-Touch, no WiGig, WLAN, WWAN
Memory : 16GB DDR4-2133MHz SODIMM
Graphics : NVIDIA GeForce 940MX 2GB GDRR5
Security Chip : Hardware dTPM
Keyboard : Backlit Keyboard with Number Pad - English
TPM Setting : Hardware dTPM2.0 Enabled
Camera : IR & 720p HD Camera with Microphone
Hard Drive : 512 GB Solid State Drive, PCIe-NVMe OPAL2.0
Front Battery : 4 Cell Li-Polymer Battery 32WH
Rear Battery : 3cell Battery 24Wh Rear
Power Cord : 65W AC Adapter - US(2pin)
Wireless : Intel Dual Band Wireless AC(2x2) 8265, Bluetooth Version 4.1
WWAN Selection : WWAN
Integrated Mobile Broadband : Integrated Mobile Broadband upgradable
Language Pack : Publication - English
Warranty : 1 Year Depot




Caracteristicas MacBook Pro 15' | $2,599.00
Touch Bar and Touch ID
2.8GHz quad-core 7th-generation Intel Core i7 processor, Turbo Boost up to 3.8GHz
16GB 2133MHz LPDDR3 memory
512GB SSD storage
Radeon Pro 555 with 2GB memory
Four Thunderbolt 3 ports
Backlit Keyboard - US English



Gracias por leer,
DUDA
#9
Hola!! que diferencia hay entre el free y available? Aquí comparto el uso de mi memoria ram y no lo tengo muy claro...

Código: php
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7859        5521         981         307        1356        2394
Swap:          8191         415        7776



Gracias por leer,
DUDA
#10
Hola! por base de datos he obtenido el usuario y contraseña del cms (Joomla 3.8.3), la contraseña está encriptada y por lo que he leido usa un hash para esto.

Código: php
$2y$10$oePF65xpeETnhQ0JeIZzW.jheuQ6A51QbkGZP3HZy4zDVWgfhj4tS


Estoy buscando la forma de descriptar ese password, puesto que no quiero alterar la contraseña del cliente.

Gracias por leer,
DUDA
#11
Hola amigos de lo imposible, he notado que el precio del bitcoin en los últimos días está de bajada y me gustaria subirme al carro de las criptomonedas: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Tengo una par de dolares ahorrados y bueno mi primera opción es ir por Ethereum que tiene un costo menor.

¿Alguno de ustedes está con criptomonedas y quizá pueda compartir su experiencia?

Gracias por leer,
DUDA
#12
Ideas y Sugerencias / Rangos en el foro
Diciembre 22, 2017, 01:58:14 PM
Hey @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta recuerdas que en el aun vivo CPH  ;D habian unos rangos? Que opinas de introducirlo acá a manera de medir las intervenciones de la comunidad, está claro que un rango no representa saber más o menos. Recuerdo que la gente intervenia más en las preguntas y así se generaba mejor feedback para el foro. Me cuentas que tal!

Gracias por leer,
DUDA
#13
Hola, existe alguna pena legal si copias una web extranjera y la usas para ti?

Hace un tiempo copie una web nicaraguense y la uso en mi sitio (Perú) y pues me ha llegado este mensaje haciendo mensión a ello.

Por este medio estamos solicitando remover el diseño
(No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) que han tomado de nuestro sitio web No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
en un período no mayor de cuatro días . Ustedes están utilizando de
manera indebida y sin permiso alguno contenido con derechos de autor
el cual es propiedad de nuestra empresa NOMBRE EMPRESA S.A.

Hemos decidido notificarles por escrito y esperamos atiendan a nuestra
solicitud. De modo contrario, estaremos procediendo por la vía legal.

Atentos su respuesta,
Departamento Legal


Gracias por leer,
DUDA
#14
Como sacarle el IP a un usuario de Underc0de o de cualquier foro por Mensaje privado.

Que necesitamos? Un servidor apache.

Descargamos un emoticon de Underc0de y lo colocamos en el root de nuestro servidor web, o en cualquier lugar que recordemos su ruta.

Enviamos un MP al usuario con el texto que queramos y el emoticon lo enviamos como imagen [ img ] para que crea que es un emoticon del foro ;)
Es decir que en el img debería ir IP_Del_Server_O_Dominio/Direccion_De_La_Imagen.jpg

Luego chequeamos el access.log del servidor apache.
Una buena forma de chequear el access.log es:

Código: php
tail -f /var/log/apache2/access.log


Eso hace que muestre el archivo a medida que sigue creciendo (y podemos darle espacios con enter para tener más claro el resultado).

Cuando el usuario lee el MP en el access.log de nuestro servidor nos aparecerá algo así:

Código: php
213.125.215.95 - - [16/Dec/2017:16:05:50 -0300] "GET /emoticon.jpg HTTP/1.1" 200 28543 "https://underc0de.org/foro/index.php?action=pm/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"


Ahí podemos ver el IP claramente y dice que fué accedido desde No tienes permitido ver los links. Registrarse o Entrar a mi cuenta por lo que no hay lugar a confusión.

Claro, que si entra usando proxys, no conseguiremos nada.

Gracias por leer,
DUDA

Fuente: Solid Water para CPH
#15
Amigos de lo imposible, mi manjaro no está reconociendo mi lectora, cuando inserto un cd obtengo el siguiente error en devices

Código: php
An error occurred while accessing 'Home', the system responded: The requested operation has failed: Error mounting /dev/sr0 at /run/media/manjaro/MJRO1610: unknown filesystem type 'iso9660'


He intentado montarlo con algo de esto

Código: php
[manjaro@manjaro ~]$ sudo mount /dev/sr0 /mnt/cdrom/
mount: /mnt/cdrom: unknown filesystem type 'iso9660'.


tambien esto sin éxito

Código: php
[manjaro@manjaro ~]$ sudo mount -t iso9660 /dev/sr0 /mnt/cdrom/
mount: /mnt/cdrom: unknown filesystem type 'iso9660'.


esta es la salida de mi fstab

Código: php
[manjaro@manjaro ~]$ cat /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=83d09ce7-fb69-4274-8266-be6ebe62d571 /              ext4    defaults,noatime 0 1
UUID=47caaae5-3fa6-4029-8342-27a2ac2133b8 swap           swap    defaults,noatime 0 0
UUID=95A5-8ED4                            /boot          vfat    defaults,noatime 0 2
UUID=6c94c0ba-e9b0-4353-945b-c1f476e75835 /home          ext4    defaults,noatime 0 2



No se que puede estar mal, me gustaria saber sus pensamientos.

Gracias por leer,
DUDA
#16
Off Topic / ¿Foros de Cloud Computing/Technology?
Noviembre 08, 2017, 03:35:59 PM
Hace unas semanas fue la hackathon onpe en mi país (Perú), La problemática era la intercomunicación entre distintas identidades del gobierno para transportar documentos seguros (con firmas digitales) y hacer tracking de la misma. Mi team quedó segundo lugar con una solución de websockets en nodejs + mongo db, permitiendo el envió de la información encriptada con llaves publicas/privadas en tiempo real y consultas (tracking) a través de una app web.

El equipo ganador presentó una solución de blockchain (la cual hasta ahí desconocía) + chatbot para tracking, como para quitarse el sombrero y aplaudir. Entonces ahí pensé, hay mucho de lo que no sé en cloud technoloy, entonces les pregunto a ustedes si conocen algún foro de cloud computing/technology bueno para enterarme de lo mucho que no se y seguir aprendiendo.

pd: Me gustaria saber sus pensamientos sobre la solución ganadora  ::)

Gracias por leer,
DUDA
#17
Hola a todos! hay una aplicación web del gobierno en Perú que solo funciona en IE (sunat.gob.pe) estoy necesitando instalar IE en mi manjaro y no lo consigo, alguien puede apoyar con los pasos?

Gracias por leer!
DUDA
#18

Que las habilidades técnologicas son algo en alta demanda en la actualidad no deberías ser un secreto para nadie. Pero dentro de ese espectro entran muchísimas cosas, no todo tiene que ver con aprender a programar para crear la próxima gran app.

Si a ti lo que te interesa es la ciberseguridad, en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta cuentan con un amplio catálogo de cursos tanto avanzados como para principiantes para que obtengas algunas de las habilidades más críticas en el campo. Y además, muchísimos son gratuitos.



Lo que ofrecen en Cybrary es una amplia sección de cursos en vídeo que puedes tomar simplemente creando una cuenta, y además puedes tomar exámenes para obtener certificación. Eso sí, estos últimos cuestan dinero, pero la idea de la web es hacerlo de forma más accesible para que los estudiantes no tengan que viajar a una sede principal a tomar exámes y aplicar por certificaciones que cuestan cientos de dólares.

Los cursos están organizados por tipo de habilidades, tipo de carrera, y nivel de dificultad. También hay microcertificaciones que abarcan un solo tema específico, como por ejemplo, seguridad en el desarrollo de software, análisis dinámico de malware, o configuración de DNS en Microsoft Server, etc.

En el campo de la ciberseguridad hay mucho que abarcar. Este tipo de trabajos también tienen una demanda muy alta, especialmente con la importancia que ha cobrado el tener un departamento de IT robusto que pueda lidiar con ciberataques que dejan fuera de juego toda una empresa, o muchas a nivel mundial. Así que naturalmente son habilidades bastante valiosas que quizás te interese aprender.

Fuente: Genbeta
#19


Según informan desde SoftPedia, Tails ha liberado la versión 3.0 de su sistema operativo orientado a la privacidad y el anonimato online. Se trata de una actualización importante que está totalmente basada en los repositorios de Debian 9, al que no le debería faltar mucho para salir a la calle.

Comparada con su versión anterior, esta 3.0 supone una importante actualización de la distribución. También es la primera versión del sistema operativo liberada más o menos al mismo tiempo que un nuevo lanzamiento de Debian GNU/Linux.

Los responsables de Tails comentaban lo siguiente:

Debian 9 (Stretch) se liberará el 17 de junio. Es también la primera vez que lanzamos una nueva versión de Tails casi al mismo tiempo que la versión de Debian en la que está basada. Este era un objetivo importante para nosotros, ya que beneficia tanto a nuestros usuarios como a los de Debian en general.

Entre las nuevas características de Tails 3.0 podemos encontrar una nueva experiencia de inicio y apagado, con un Tails Greeter mejorado durante el primer arranque. En este primer arranque se pueden configurar áreas importantes del sistema operativo antes de usarlo.

En lo que respecta al escritorio el nuevo Tails contará con GNOME 3 como escritorio por defecto, con una interfaz presidida por un tema visual oscuro moderno y discreto. Otra característica interesante de esta versión es que se trata de la primera que sólo funciona en ordenadores de 64 bits.

Entre el software que incorpora podemos encontrar Tor Browser 7.0, KeePassX 2.0.3, LibreOffice 5.2.6, Inkscape 0.92.1, Audacity 2.1.2, Enigmail 1.9.6, MAT 0.6.1, Dasher 5.0 y Git 2.11.0. Además de esto hay unos pocos cambios menores realizados en la interfaz de usuario. Se puede consultar un registro completo de todas las novedades No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Fuente: SoftPedia
#20

Alguien ha desarrollado un nuevo malware llamado No tienes permitido ver los links. Registrarse o Entrar a mi cuenta Se trata de un troyano para Linux en forma de script de bash que contiene un programa para minar criptomonedas y que ataca exclusivamente a los dispositivos Raspberry Pi.

Si tienes uno de los populares mini ordenadores es importante que mantengas tu sistema operativo al día, especialmente si está configurada para permitir conexiones SSH externas. Aplicar la actualización más reciente de Raspbian OS debería ser suficiente.

Linux.Muldrop.14 fue descubierto por la firma de seguridad rusa Dr. Web luego de que su sistema honeypost se viese infectado con él. El malware se enfoca en las placas Raspberry Pi que aún tengan establecidos por defecto el nombre de usuario "pi" y la contraseña "raspberry".

Una vez infectada la máquina, Linux.Muldrop.14 cambia la contraseña, instala varias utilidades y busca en la red por otros dispositivos para infectarlos. El objetivo es minar criptomonedas poco conocidas como "Monero" ya que intentar hacerlo en algo como Bitcoin requiere muchísimo más poder que el de las Pi.

Los modelos más antiguos de Pi sean quizás los más vulnerables si no han sido actualizadas en mucho tiempo, y con los más de 12 millones de Raspberry Pi que se han vendido en los últimos años, son muchos dispositivos los que podrían infectarse.

Fuente: ZDNet
#21

La magnitud de los supuestos ciberataques de Rusia a los sistemas de control del voto en Estados Unidos era mayor de lo que se pensaba. Hasta Obama tuvo que echar mano del "teléfono rojo" en cierto momento de la campaña electoral para quejarse al Kremlin de forma oficial y solicitar que esas actividades cesaran de inmediato.

El informe publicado en Bloomberg revela cómo los crackers —que no hackers— rusos se infiltraron en bases de datos de votantes y en sistemas software que afectaron a 39 estados de EE.UU, casi el doble de los que se había estimado inicialmente.

El impacto real del ciberataque podría haber sido inexistente

Los responsables de la investigación creen que al final esas incursiones no tuvieron impacto en los resultados finales, pero incluso el entonces presidente de los Estados Unidos, Barack Obama, tuvo que hablar con los dirigentes rusos para exigir explicaciones.



En la investigación se sugiere que ese ciberataque fue más importante de lo que se pensaba inicialmente. En las elecciones preliminares de Illinois en julio de 2016 se descubrió un agujero de seguridad en la base de datos de los votantes, pero los crackers no lograron modificar esos datos. Los mismos responsables de la investigación, no obstante, creen que esta incursión fue un "entrenamiento" para ataques posteriores.

Putin negó durante meses tales acusaciones, pero a principios de mes su discurso cambió y admitió que "hackers patrióticos" podrían haber interferido en el proceso electoral. De hecho, comentó, el papel ruso en esas incursiones era "teóricamente posible".

Fuente: Bloomberg
#22

El equipo de seguridad de Microsoft ha descubierto una familia de malware usada por un prominente grupo de ciberespionaje llamado PLATINUM, y que se aprovecha de una característica de los procesadores Intel para saltar la seguridad del cortafuegos y robar datos. Sí, una característica, no un fallo o vulnerabilidad, al menos no en el estricto sentido de la palabra.

Esta familia de malware usa la función SOL (Serial-over-LAN) de la Tecnología de gestión activa de Intel (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta como una herramienta de transferencia de archivos. Y gracias a la forma en la que esa tecnología funciona, es capaz de sobrepasar la interfaz de red del ordenador local de forma que ni el firewall, ni cualquier producto de seguridad instalado puedan detectarle.

La inquietante CPU que controla nuestros procesadores sin que lo sepamos

La Tecnología de gestión activa de Intel (AMT) forma parte de Intel Management Engine (ME). Básicamente una tecnología bastante oscura que ha desarrollado Intel en sus procesadores, y que hace que los chips cuenten con un subsistema totalmente independiente del sistema operativo instalado en el ordenador.

Intel ME permite, entre otras cosas, gestionar equipos de forma remota. Intel ME se ejecuta incluso cuando el procesador principal está apagado, y ha sido creada por la empresa para ofrecer capacidad de administración remota a empresas que manejan grandes redes con ciento o miles de ordenadores.

Como la interfaz SOL AMT se ejecuta dentro de Intel ME, está separada del sistema operativo y permanece funcional siempre que el ordenador esté conectado físicamente a la red, incluso si está apagado.

Microsoft ha descubierto malware creado por PLATINUM que abusa de la interfaz SOL AMT para robar datos de los ordenadores infectados. Aunque la función en los procesadores no está activa por defecto, ha sido detectada en malware que afectó a organizaciones y agencias gubernamentales en Asia.

En su No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, Microsoft también ha dicho que fueron capaces de identificar pistas en la forma que opera el malware que permiten a Windows Defender detectarlo antes de acceda e inicie la interfaz SOL AMT, lo que ofrece a las empresas una advertencia sobre la posible infección. Intel solo ha dicho que el grupo PLATINUM no está aprovechando ninguna vulnerabilidad en la interfaz.

Fuente: Bleeping Computer
#23
Hacking / Basic SQL Injection on JDBC
Mayo 25, 2017, 02:05:16 PM

¡Buenos días!. La siguiente entrada documenta cómo realizar un SQL Injection básico en un programa Java con JDBC (Java DataBase Connectivity). Además serán expuestas algunas posibles soluciones a esta vulnerabilidad. Para ello he creado una sencilla base de datos y he realizado un código de prueba en Java que consulta esta base de datos.

Creación de la base de datos SQL

La base de datos simplemente se compondrá una tabla, llamada 'Usuarios' que recoge cuatro atributos: un identificador (id), un nombre de usuario (nombre), una contraseña (pass) y un secreto (secreto). En este último almacenaremos una información 'secreta' de cada usuario, que sólo podrá verla este usuario una vez inicie sesión. Tanto la contraseña como el secreto se encuentran en texto plano, siendo lo ideal cifrarlos para darle seguridad. Pero al tratarse de una prueba básica lo dejaremos así para verlo con más facilidad.

Después simplemente añadiremos varios usuarios con diferentes contraseñas. Podemos ver el script SQL:

Código: php
/*  Creamos la base de datos  */
CREATE DATABASE dbftwr CHARACTER SET utf8 COLLATE utf8_spanish2_ci;

/*  Creamos las tablas  */
CREATE TABLE Usuarios (
id INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
nombre TEXT NOT NULL,
pass TEXT NOT NULL,
secreto TEXT NOT NULL,
PRIMARY KEY (id));

/* Creamos los inserts */
INSERT INTO Usuarios (nombre,pass,secreto) VALUES
('pedro','123456','Pedro realmente es Pablo'),
('pablo','987654321','Pablo es el padre de Juan'),
('miguel','miguel','Miguel no tiene amigos');


Uso vulnerable

Para realizar las consultas a la base de datos e iniciar sesión, he utilizado un código que genere una ventana gráfica (Swing) con un pequeño formulario de inicio de sesión. Podemos observar el código aquí:

Código: php
package es.fwhibbit.sqli;

import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class SQLInjection extends JFrame implements WindowListener {
private static final long serialVersionUID = 1L;

// Elementos gráficos
JLabel lblUsuario = new JLabel("Usuario: ");
JLabel lblPass = new JLabel("Pass: ");
JTextField txtUsuario = new JTextField("");
JTextField txtPass = new JTextField("");
JLabel lblSecreto = new JLabel("Secreto", SwingConstants.CENTER);
JButton btnAceptar = new JButton("Aceptar");
JButton btnLimpiar = new JButton("Limpiar");

public SQLInjection() throws ClassNotFoundException, SQLException {

// Configuración general de la ventana
setLayout(null);
setSize(400,250);
setTitle("SQL Injection Test");
setLocationRelativeTo(null);
setVisible(true);

// Añadimos los elementos a la ventana
add(lblUsuario); lblUsuario .setBounds(1, 1, 100, 50);
add(txtUsuario); txtUsuario .setBounds(100, 1, 300, 50);
add(lblPass); lblPass .setBounds(1, 60, 100, 50);
add(txtPass); txtPass .setBounds(100, 60, 300, 50);
add(lblSecreto); lblSecreto .setBounds(0, 120, 400, 50);
add(btnLimpiar); btnLimpiar .setBounds(95, 180, 100, 50);
add(btnAceptar); btnAceptar .setBounds(205, 180, 100, 50);

// Bloque de conexión a la base de datos
Class.forName("org.mariadb.jdbc.Driver");
String dbpass = "";
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dbftwr", "root", dbpass);
Statement s = connection.createStatement();

// Listeners
addWindowListener(this);
// Botón cuya función es limpiar los campos de texto
btnLimpiar.addActionListener((ActionEvent event) -> {
        txtUsuario.setText("");
        txtPass.setText("");
        });
// Botón para iniciar sesión, está sección de código será la encargada de realizar las consultas
btnAceptar.addActionListener((ActionEvent event) -> {
try {
ResultSet rs = s.executeQuery("select secreto from Usuarios where (nombre = '" + txtUsuario.getText() + "' and pass = '" + txtPass.getText() + "');");
        rs.next();
lblSecreto.setText(rs.getString(1));
}
catch (SQLException e) {e.printStackTrace();}
        });

//connection.close();
}
public static void main(String[] args) throws NumberFormatException, IOException, ClassNotFoundException, SQLException {new SQLInjection();}

public void actionPerformed(ActionEvent ae) {}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we) {this.setVisible(false);}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
}


Ejecutando el programa, podemos observar el siguiente resultado. Somos Pedro y conocemos su contraseña: 123456. Por lo que será nuestro conejillo de indias.



De forma que iniciando sesión correctamente, nos devolverá el secreto de Pedro.



Los dos bloques de código que nos ocupan son los siguientes: el bloque de conexión a la base de datos y el contenido del botón de aceptar, que almacena la consulta.

Código: php
// Bloque de conexión a la base de datos
Class.forName("org.mariadb.jdbc.Driver");
String dbpass = "";
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dbftwr", "root", dbpass);
Statement s = connection.createStatement();


// Botón para iniciar sesión, está sección de código será la encargada de realizar las consultas
btnAceptar.addActionListener((ActionEvent event) -> {
try {
ResultSet rs = s.executeQuery("select secreto from Usuarios where (nombre = '" + txtUsuario.getText() + "' and pass = '" + txtPass.getText() + "');");
            rs.next();
lblSecreto.setText(rs.getString(1));
}
catch (SQLException e) {e.printStackTrace();}
});


Como vemos la consulta:

Código: php
select secreto from Usuarios where (nombre = '" + txtUsuario.getText() + "' and pass = '" + txtPass.getText() + "');


Es vulnerable a un SQL Injetion, ya que al almacenar las variables directamente en la sentencia SQL, enviará la cadena de texto tal y como lo recoja de los campos de texto. Por lo que podemos jugar. Una consulta típica, siguiendo el ejemplo de pedro, sería:

Código: php
select secreto from Usuarios where (nombre = ' pedro ' and pass = ' 123456 ');


Esta sentencia mostraría el secreto de la tabla Usuarios, donde el nombre sea pedrro Y su contraseña 123456. Con esto comprobamos que la contraseña corresponda al usuario. Al ser nombre igual a pedro devolverá un booleano true (verdadero); al ser la contraseña 123456 también devolverá un booleano true. True AND True = True: Sesión iniciada correctamente. Pero ¿y si insertamos código SQL, para engañar al servidor y que nos muestre el secreto de quien queramos, sin necesidad de conocer su contraseña?. Esto lo podemos hacer aprovechando esta vulnerabilidad.

Código: php
select secreto from Usuarios where (nombre = ' pedro' or '1'='1 ' and pass = '');


De esta forma hemos injectado código (en rojo). De esta forma asignamos el nombre, es pedro (es true). O bien (1=1 (sentencia obviamente cierta, verdadera) Y pass=" (cadena en blanco, obviamente falsa)). True OR (True AND False) = True OR False = True. Obtenemos finalmente un booleano verdadero, sin conocer la contraseña, lo que nos devolverá el secreto de este usuario. Podemos realizar una prueba con el usuario Miguel, el cual no conocemos su contraseña.



Uso seguro

¿Cómo podemos solucionarlo? Con el fin de evitar este tipo de ataques sobre nuestro programa deberemos utilizar el método seguro: sustituir el Statement por el PreparedStatement. Vemos el bloque de código que hemos de editar: en primer lugar comentamos nuestro Statement, ya que no le daremos uso. Lo sustituimos por el PreparedStatement, donde le indicamos directamente la sentencia SQL; sustituyendo los elementos a insertar por signos de cerrar interrogación (?) (omitir comillas). Con la órden ps(PreparedStatement).setString y el número de posición del elemento que hemos colocado en la sentencia, indicaremos el valor a dar, ya sea una variable o un getText() como en mi caso.

Código: php
// Bloque de conexión a la base de datos
Class.forName("org.mariadb.jdbc.Driver");
String dbpass = "";
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dbftwr", "root", dbpass);
//Statement s = connection.createStatement();


// Botón para iniciar sesión, está sección de código será la encargada de realizar las consultas
btnAceptar.addActionListener((ActionEvent event) -> {
try {
PreparedStatement ps = connection.prepareStatement("select secreto from Usuarios where (nombre=? and pass=?)");
ps.setString(1, txtUsuario.getText());
ps.setString(2, txtPass.getText());
ResultSet rs = ps.executeQuery();
rs.next();

lblSecreto.setText(rs.getString(1));
}
catch (SQLException e) {e.printStackTrace();}
});


De esta forma evitaremos que nuestro código sea vulnerable a ataques del tipo SQL Injection, al menos a los más conocidos. Ya sabéis, ¡nunca estaremos 100% seguros!.

Uso seguro (alternativa)

Una forma también válida para solventar esta vulnerabilidad, es hacer una única sentencia sin posibilidad de edición. Y a su vez jugar con las respuestas. El código será similar, de forma que:
Código: php

// Bloque de conexión a la base de datos
Class.forName("org.mariadb.jdbc.Driver");
String dbpass = "";
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/dbftwr", "root", dbpass);
Statement s = connection.createStatement();


// Botón para iniciar sesión, está sección de código será la encargada de realizar las consultas
btnAceptar.addActionListener((ActionEvent event) -> {
try {
ResultSet rs = s.executeQuery("select * from Usuarios;");
while (rs.next()) {
    if (rs.getString(2).equals(txtUsuario.getText()) && rs.getString(3).equals(txtPass.getText())) {
    lblSecreto.setText(rs.getString(4));
    break;
    }
    else {lblSecreto.setText("ERROR");}
}
}
catch (SQLException e) {e.printStackTrace();}
});


Como podemos ver, el bloque de conexión se mantiene intacto a la primera opción. El interior del botón simplemente tendrá la sentencia "select * from Usuarios" (selecciona todo de la tabla Usuarios). De los resultados que obtenga, mientras haya irá recorriendo de uno en uno, comprobando que el contenido del campo de texto de usuario sea el mismo que el nombre de usuario de la tabla, Y el contenido del campo de texto de la contraseña sea igual a la contraseña del usuario de la tabla. Si estas condiciones se cumplen, se mostrará el secreto, sino, mostrará un error.



De esta forma, al no modificar la sentencia directamente, sino jugar con sus resultados evitaremos esta vulnerabilidad en concreto.

De esta forma tan sencilla, hemos explotado y solucionado la vulnerabilidad de SQL Injection básica en nuestro software. Esta inyección, reitero que es básica, existen otras compuestas con más potencial y complejidad, pero esas, las dejo para otra entrada... Espero que os haya gustado, ¡un saludo!.

Gracias por leer!
DUDA

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#24

Windows Defender es un antivirus bastante bueno, es una herramienta sólida y que al venir ya integrada en Windows tiene un impacto muy bajo en el rendimiento del sistema en comparación son soluciones de terceros. No decimos que sea perfecto, pero como solución de seguridad básica, gratuita e integrada perfectamente con Windows 10, queda muy bien parada.

Con la llegada de la Creators Update Microsoft le dio un lavado de cara a su herramienta antivirus y lo ha convertido en un Centro de seguridad completo con varias opciones para protegerte de diferentes amenazas o solucionar problemas en un par de clicks.

Una de las características más importantes de Windows Defender es la protección basada en la nube, ya que esta dice proporcionar mayor protección y de forma más rápida al tener acceso a los datos más recientes. Y con la Creators Update también puedes elegir manualmente el nivel de protección basada en la nube y aumentarlo, solo que el proceso es algo más complicado que marcar una casilla en el Centro de seguridad.

Requisitos

Es importante que sepas algunas cosas antes de comenzar. La primera es que para poder aumentar el nivel de protección de Windows Defender necesitarás editar el registro de Windows y tendrás que unirte al programa MAPS de Microsoft.

Al unirte al programa MAPS de Microsoft aceptarás que la empresa recopile varias piezas de información sobre las amenazas detectadas en tu equipo, y en algún momento quizás se recopile tu información personal, aunque Microsoft promete que no la usará para identificarte o contactarte.

Antes de proceder a editar el registro de Windows es importante que tengas cuidado en hacerlo de forma correcta o podrías dañar tu sistema de forma permanente. Te recomendamos crear un punto de restauración al que puedas volver en caso de que algo vaya mal.

Cambiar el nivel de protección en la nube de Windows Defender

Presiona la tecla de Windows + R y escribe "regedit" (sin las comillas) y presiona Enter. Esto abrirá el Editor del Registro de Windows.



Navega hasta la siguiente ruta:



Selecciona Nuevo, luego elige Clave, nombra la nueva carpeta Spynet y presiona Enter:



Ahora haz click derecho en Spynet, elige Nuevo, luego selecciona Valor de DWORD (32 bits) y cambia el nombre a SpynetReporting. Presiona Enter. Luego haz doble click en SpynetReporting y cambia la Información del valor de 0 a 2. Presiona Aceptar.



Con esto te habrás unido al programa de Microsoft MAPS. Ahora es momento de cambiar el nivel de protección antivirus basado en la nube.

Vuelve a abrir el editor del registro, navega hasta la misma ruta:



Haz click derecho sobre la carpeta Windows Defender, selecciona Nuevo y luego haz click en Clave. Nombra la nueva carpeta como MpEngine y presiona Enter.



Ahora haz click derecho sobre MpEngine, selecciona Nuevo y luego elige Valor de DWORD (32 bits). Cambia el nombre de la clave a MpCloudBlockLevel y presiona Enter. Haz doble click sobre MpCloudBlockLevel y cambia el número en información del valor de 0 a 2 y presiona Aceptar.



Una vez completados estos pasos, Windows Defender usará un nivel de protección más elevado a la hora de escanear y detectar archivos sospechosos en tu ordenador. Esperemos que estas opciones aparezcan tarde o temprano directamente en el Centro de seguridad para no tener que recurrir a editar el registro si queremos disfrutar de ellas.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias por leer!
DUDA
#25

Aunque la historia de Bitcoin es corta (surgió en 2009), mucho ha llovido desde su lanzamiento. Su creación siempre ha estado rodeada de un cierto halo de misterio, pues no se sabe quien la creó. Satoshi Nakamoto es solo un pseudónimo que usaba la persona o personas que dieron luz al proyecto.

Pero todavía hoy, ocho años después de su creación, Bitcoin no es del todo mainstream. Muchos se han sorprendido de que los creadores del ramsonware que afectó a Telefónica y otras empresas quisieran cobrar en Bitcoin. Vamos a explicaros todo sobre esta moneda.

Bitcoin, tecnología y economía

Bitcoin es una idea tecnológica muy curiosa. Combinando redes de ordenadores, criptografía y software es posible crear una moneda virtual completamente distribuida, sin necesidad de una entidad central que la emita y controle. Ocho años después la criptografía sigue siendo resistente y el uso de Bitcoin se ha disparado.

La economía que hay detrás de esta moneda es la misma que la que hay detrás de cualquiera: escasez y confianza. Es decir, hay una base sólida para que un Bitcoin cueste dinero, al menos tan sólida como la que fija los precios del oro.



Y aunque Bitcoin fue la primera criptomoneda hay muchas otras. Es cierto, Bitcoin sigue siendo la más popular aunque últimamente otras como Ethereum están subiendo de valor por otros servicios de valor añadido que ofrecen.

Bitcoin, cómo obtenerlos

Está claro que si queremos obtener euros basta con trabajar en un país cuya moneda sea euros o ir a una oficina de cambio de monedas. Pero, ¿cómo logramos tener Bitcoin? Desde luego trabajando no, ya que no es moneda oficinal en ningún país del mundo.

Los inicios de cualquier moneda son complicados. Tiene que haber un banco emisor, la gente tiene que confiar y aceptar la moneda y poco a poco se va poniendo en circulación. En cambio con Bitcoin no existe un emisor, los ordenadores distribuidos que velan porque las transacciones sean correctas obtienen, de vez en cuando, monedas como premio. Esto se denomina minería, y es la forma en la que se crea el dinero con los Bitcoin.



Pero antes de poner nuestro ordenador a trabajar para crear dinero he de decir que la minería es una locura ahora mismo. Los que obtienen dinero con esta técnica tienen clusters de ordenadores con tarjetas gráficas dedicadas y en zonas donde la electricidad es barata o incluso subvencionada. Ganar dinero con la minería es cosa del pasado.

¿Entonces? ¿De dónde sacamos Bitcoin? Pues como en el mundo real, en las casas de cambio de monedas. En Internet hay muchas y nos permiten cambiar dinero normal (euros, por ejemplo) por Bitcoins. Coinbase es un sitio de cambio (y monedero, como veremos más adelante) bastante popular.

Bitcoin, como guardarlos

Ahora llegamos a la gran pregunta: ¿cómo y dónde se guardan los Bitcoin? Bien, las criptomonedas como Bitcoin son completamente virtuales. Para acceder a ellas originalmente había que usar un software. Este software nos permite ver el saldo que tenemos en nuestra cuenta y hacer y recibir transferencias.

Lo bueno de Bitcoin es que es un protocolo abierto, hay muchos software para gestionar nuestro dinero. Lo hay para Windows, Linux, Mac, Android, iOS... Yo personalmente recomiendo llevarlo en el móvil y dentro de Android me gusta Android Wallet.



Sin embargo usar un software tiene un peligro. Si por algún motivo se nos estropea el dispositivo o se borra o formatea, perderemos todo el dinero. Digamos que con Bitcoin el dinero está en "la nube de Bitcoin" (el llamado Blockchain) y lo que guarda el software es una copia de la clave para acceder a él. Si usamos un software es conveniente hacer una copia de seguridad de estas claves.

Otra opción para llevar el control de nuestros Bitcoin es usar un monedero web. De esta forma una página web se encarga de guardar nuestras claves y accederemos a nuestras cuentas con un usuario y contraseña. Básicamente lo que hacen estas webs es la función de un banco.

Coinbase es una buena opción para esto, a que además permite comprar y vender Bitcoins. Lo único malo es que si usamos este método perdemos parte de la gracia de tener Bitcoins, usar un sistema completamente descentralizado sin depender de la confianza en ninguna entidad. Nadie puede requisarnos nuestro dinero sin robarnos las claves. En cambio si tenemos el dinero en una web tenemos que confiar en ella.

Bitcoin, vaivenes de cotización

Ahora puede parecer que el Bitcoin está muy caro, más de 2000 euros al cambio. Y que no es un buen momento para invertir en él. Pero en el pasado ya hemos visto momentos similares, y el consejo debería ser el mismo: cuidado porque es un bien bastante especulativo.

Bitcoin ha sufrido muchos baches en el camino. El primero fue el cierre del Silk Road, una mercado de intercambios ilegales que el FBI cerró en 2013. Las transaccciones se hacían con Bitcoins y la cotización se desplomó.



Apenas un año después el mayor exchange de Bitcoin del mundo, MTGox, sufría un ataque y le robaron 744.000 Bitcoins, de sus usuarios. Al poco tuvo que cerrar. De nuevo la cotización bajó.

Pero Bitcoin no era una moda pasajera. Y aunque sigue teniendo muchos retos por delante, ha sabido sobreponerse a cada varapalo. Así que hay que tenerlo en cuenta en el futuro, ya sea como un activo más o como una moneda para pagar.

Gracias por leer!
DUDA

Fuente: Xakata
#26

Hola secuaces:

Seguimos con la segunda parte de esta serie de entradas dedicada a mi primera vez, a la charla de este Rookie, (Espero que no sea la última), en #CONPilar17.
En la entrada anterior procedimos a identificar las evidencias del hipotético caso que monté.
Pues, una vez que han sido identificadas, es hora de buscar esos famosos dispositivos conectados al Sistema. Así que nos ponemos manos a la obra, que esto es pan comido, (¿O no tanto?).
Para identificar los dispositivos USB conectados a un Sistema Windows, usaremos la herramienta RegRipper, con su plugin 'usbstor', sobre el fichero del Registro de Windows que tenemos montado, 'System'. Así que pasamos esa línea...

Código: php
perl rip.pl -r /mnt/windows_mount/Windows/System32/config/SYSTEM -p usbstor usbstor2 usbstor3




Pues... va a ser que algo ha salido mal. Porque sólo se nos muestra un dispositivo conectado al Sistema, tratándose del disco duro externo, de nombre Intenso, que fue con el que se recogieron las evidencias oportunas.

Y ahora ¿Qué hacemos? ¿Decimos que no hay nada y nos quedamos tan anchos? Porque, a ver. No hay nada. O nos preguntamos ¿Qué ha pasado?

Seamos curiosos. Veamos qué ha pasado.

Y ¿Cómo determinamos qué ha pasado? Con una Linea Temporal, (Timeline). Y ¿Qué hacemos cuando establecemos una línea temporal? Creamos una lista de eventos, en orden cronológico, de todo el Sistema. Podéis encontrar información interesante al respecto en la ForensicsWiki.

Para este caso, voy a emplear una utilería de TSK, (The Sleuth Kit). Concretamente, voy a usar 'fls', que extrae un listado completo de archivos y directorios, (Incluídos accesos directos, ficheros eliminados, ...), para generar el cuerpo del Timeline, (body); y 'mactime' para hacerlo legible y ordenar los datos. Podríamos, a base de fórmulas, ordenarlos directamente en un fichero CSV, pero no es labor que lleve poco tiempo.

Y vamos a crear dos líneas temporales. Una que contenga los datos del día 16 de diciembre, (cuando se intervino en el Sistema), y otra general de todo el Sistema.

Código: php
fls -f ntfs -o 206848 -m / -rl IncidenteFuga.dd > body.txt

mactime -b body.txt 2016-12-16 > Timeline-16-12-2016.csv

mactime -b body.txt > Timeline.csv




Ahora tenemos dos ficheros, dos líneas temporales, que nos van a ayudar a esclarecer muchas cosas, y que guardaremos y tendremos como referencia. No sin antes, echarle un ojo a la del día 16 de diciembre, en hora anterior a la que se intervino en el Sistema. Recordad que tenemos esos datos a raiz de la identificación de la Evidencia.

Y ¿Qué es lo que nos encontramos cuando estudiamos ese Timeline? Un fichero 'Prefech', que indica la ejecución de una herramienta, de nombre 'USBOBLIVION64.EXE', a las 07:07:00 horas de ese día 16, (Minutos antes de la intervención).



Seamos algo más curiosos... a ver si se ha ejecutado más veces esa herramienta... La buscamos en esa línea temporal, a través de

Código: php
cat Timeline-16-12-2016.csv | grep USBOBLIVION




Sin más resultados que el obtenido anteriormente.

No lo he comentado aún, pero el factor tiempo, es crítico en todos los sentidos. Un segundo puede marcar la diferencia entre 'involucrar' a un usuario, (hablamos de usuarios en Forense, no de personas), o 'no involucrarlo'. No es lo mismo que se lleve a cabo una acción en un Sistema, un segundo antes de que se finalice la sesión en un equipo, o un segundo después, por ejemplo.

Por ello, hay que tener muy presente ese factor tiempo, (y los Husos horarios), por descontado.
Bueno. Ya tenemos algo.
Tenemos un Incidente de Seguridad, en el que se intervino un día 16 de diciembre, a las 06:09:25 horas, (UTC), cuando se conectó el disco duro Intenso.
Tenemos una ejecución de una herramienta con nombre 'USBOblivion', el día 16 de diciembre, a las 07:07:00 horas, (CET).
Con esta simple acción, hemos reducido considerablemente el espacio, (tiempo), de búsqueda, (a cuestión de minutos).
Pero... ¿Qué es USBOblivion?¿Qué hace? Para ello, lo primero que hacemos es visitar su página oficial, que nos dice que "Elimina todas las trazas de dispositivos USB conectados".



Vosotros, no sé. Pero en mi cabeza, si ya de por sí la palabra 'eliminar', me cuesta creérmela... 'Eliminar' y 'Todos', las dos juntitas... no me encajan en este mundo.

Para responder a ello, para saber realmente, tenemos que ser curiosos. Debemos preguntarnos ¿Qué dice que hace?¿Qué vemos que hace?¿Qué hace realmente? Porque, creedme, la respuesta rara vez será la misma.

Gracias por leer!
DUDA


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#27

Hola a todos chicos! En la entrada de hoy vamos a configurar una VPN utilizando una Raspberry Pi.

No tienes permitido ver los links. Registrarse o Entrar a mi cuentade las ventajas que ofrece disponer de una conexión VPN en cuanto a la protección de nuestros datos, para lo cual os he enlazado la correspondiente entrada. ¡Recomiendo echarle un ojo!

La solución que utilizaremos ahora es la instalación de un servicio OpenVPN vía UDP dentro de una Raspberry Pi, fácilmente accesible desde cualquiera de nuestros dispositivos. Frente a las diversas soluciones automatizadas y en forma de script que sé que las hay, vamos a realizar el proceso de manera un poquito más manual. ¡Una VPiN!

Instalación de OpenVPN

Comenzaremos ahora a instalar la herramienta OpenVPN para ofrecer un servicio VPN al exterior. Podemos hacerlo desde los mismos repositorios de Raspbian.

Código: php
sudo apt install openvpn



Podemos comprobar el estado del servicio, y acto seguido iniciarlo y volver a comprobar el estado para ver si todo ha ido correctamente.

Código: php
sudo service openvpn status
sudo service openvpn start
sudo service openvpn status




Para seguir configurando el servicio, de momento lo desactivaremos.

Código: php
sudo service openvpn stop


Configuración de la PKI y la autoridad certificadora

Queremos ahora generar una infraestructura de clave pública o PKI para permitir la autenticación y la verificación de la identidad del servidor y de los clientes. Para ello, lo primero que tenemos que hacer es configurar OpenVPN para que sea capaz de generar los pares de claves pública y privada RSA necesarios para crear estos certificados y actuar como entidad certificadora (CA).

Para manejar las claves RSA OpenVPN se sirve de una utilidad llamada easy-rsa, que proporciona una interfaz fácil para generar claves. Copiamos la carpeta de dicha utilidad, que podemos instalar de repositorios de no tenerla, en el interior del directorio de OpenVPN.

Ejecutaremos ahora los siguientes comandos como administrador para generar nuestra entidad de certificación:

Código: php
source ./vars
./clean-all
./build-ca


Iremos rellenando uno a uno los campos que se nos piden aceptando el valor por defecto.

Código: php
https://www.fwhibbit.es/wp-content/uploads/2017/05/VPNraspberry-020.jpg


Una vez acabado el formulario tendremos nuestra CA. Podemos ahora construir nuestro servidor de claves con el nombre que queramos

Código: php
./build-key-server OpenVPNServer


Se nos pedirá de forma similar al paso anterior rellenar una serie de campos. Podemos dejar todo por defecto, ya que nos rellenará el nombre del servidor con el que hemos introducido. Además, debemos aceptar la firma del certificado. El resultado es un certificado para el servicio con validez de diez años.

Pasamos a generar ahora las claves de usuarios o clientes. Asignaremos un par de claves a cada uno de los dispositivos desde donde queramos acceder a la VPN, o bien podemos tener un solo par de claves repartido entre los que queramos. Sin embargo, esto impide la conexión concurrente de dispositivos.

Para crear nuestro par de claves, ejecutaremos:

Código: php
source ./vars
./build-key-pass hartek


Se nos mostrará de nuevo un formulario muy similar. Esta vez, además, debemos introducir una contraseña de acceso con la que proteger nuestra clave privada.



Accederemos ahora al directorio /etc/openvpn/easy-rsa/keys, en el cual encontramos todas las claves generadas hasta el momento. Protegeremos nuestra clave privada mediante TripleDES con el siguiente comando:

Código: php
openssl rsa -in hartek.key -des3 -out hartek.3des.key




Así queda nuestra clave privada mejor protegida si cabe. Volvemos al directorio /etc/openvpn/easy-rsa.

Ahora podemos configurar el algoritmo de intercambio de claves Diffie-Hellman, necesario para realizar el intercambio de claves de la PKI de forma segura. Podemos hacerlo con el siguiente comando, que tardará un rato en terminar de ejecutarse:

Código: php
./build-dh




Para prevenir los ataques de denegación de servicio, incorporaremos una protección de acceso por HMAC. De esta forma el servidor solamente trata de autenticar a los usuarios que posean esta clave HMAC precompartida.

Generaremos la clave HMAC:

Código: php
sudo openvpn --genkey --secret keys/ta.key


Tenemos ya todas las claves necesarias para poner en marcha el servicio.

Configuración del servicio OpenVPN

Lo siguiente será crear y modificar los ficheros que utilizará OpenVPN para configurar el servicio. Primeramente creamos y abrimos con el editor vim un fichero de configuración en /etc/openvpn llamado server.conf.

Nota: Tenemos un ejemplo del mismo con explicaciones de cada campo en el directorio /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz comprimido en gzip.



Modificaremos ahora el fichero /etc/sysctl.conf del sistema Raspbian de manera que activaremos al inicio el reenvío de paquetes IPv4, que por defecto está desactivado. Esto es necesario para poder encaminar las comunicaciones a través del tunelado VPN.

Descomentamos la segunda de la imagen línea borrando el símbolo # que tiene originalmente:



Guardamos los cambios en el fichero y ejecutamos el siguiente comando para aplicar los cambios inmediatamente:

Código: php
sudo sysctl -p


Ahora configuraremos un script con una regla de encaminamiento con iptables, que nos permitirá redirigir el tráfico de la subred de la VPN a la red local. Creamos y editamos con vim un fichero /etc/firewall-openvpn-rules.sh con el siguiente contenido:



Creado el fichero, lo protegeremos impidiendo el acceso al margen del creador del mismo (el administrador):

Código: php
sudo chmod 700 /etc/firewall-openvpn-rules.sh


Una vez hecho esto, lo agregaremos al fichero /etc/network/interfaces junto al resto de la configuración de la interfaz de forma que el script se ejecute al arranque de la interfaz de red:



Hecho esto ya tendremos el encaminamiento definido desde el arranque. En este punto ejecutamos un reinicio de la máquina y tendremos listo nuestro servidor. Comprobamos que está activado el direccionamiento IPv4 con el comando:

Código: php
cat /proc/sys/net/ipv4/ip_forward


Si el valor devuelto es un 1, está activado.



Configuración de la DNS dinámica

Para permitir el acceso desde el exterior sin tener que depender de la variabilidad de la IP pública de nuestro ADSL, es conveniente configurar un servicio DDNS o DNS dinámico, como puede ser no-ip. De esta forma, se nos asignará un subdominio que apuntará a nuestra IP pública de forma dinámica y eliminaremos este problema.
Crearemos una cuenta en el servicio no-ip (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) y configuraremos un nuevo hostname. Podemos ponerle el nombre y dominio padre que queramos siempre que esté disponible.



Para que este subdominio se reasigne al cambiar la IP pública, debemos instalar el cliente noip en nuestra Raspberry Pi. Para ello, ejecutamos los siguientes comandos para descargar e instalar dicho cliente:

Código: php
mkdir /home/pi/noip
cd /home/pi/noip
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar vzxf noip-duc-linux.tar.gz
cd noip-2.1.9-1
sudo make
sudo make install


En la instalación se nos pedirán los datos de acceso a la cuenta de noip. El resto de campos podemos dejarlos predeterminados, dado que solamente tenemos un subdominio. Si no, tendríamos que seleccionarlo de una lista.



Una vez instalado el cliente no-ip, querremos que este se inicie cada vez que arranque la Raspberry Pi. La mejor manera de hacer esto es configurar un script de inicio en init.d. Podemos hacerlo creando un nuevo fichero /etc/init.d/noip2 y copiando el contenido del script encontrado en este manual.





Acto seguido, le damos permisos de ejecución y actualizamos la lista de scripts de inicio. Además, lo arrancamos de forma manual.

Código: php
sudo chmod +x /etc/init.d/noip2
sudo update-rc.d noip2 defaults
sudo /usr/local/bin/noip2




Ya tenemos configurado nuestro servicio DDNS para poder comunicarnos con él desde el exterior de forma fácil y más directa.

Creación del perfil cliente VPN

Para crear los perfiles de configuración que cada cliente deberá utilizar para realizar la conexión al servidor, haremos uso del script creado por Eric Jodoin. Podemos descargarlo de su repositorio (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) con el siguiente comando:

Código: php
sudo git clone https://gist.github.com/laurenorsini/10013430\ /etc/openvpn/easy-rsa/keys


Crearemos ahora un fichero de configuración que servirá de entrada para el script como base para crear el perfil de acceso de cliente. Crearemos y editaremos un nuevo fichero localizado en /etc/openvpn/easy-rsa/keys/Default.txt, que contendrá algunos parámetros que nos sonarán de la configuración del servidor, y otros específicos del cliente.



Ahora podemos dar permisos de ejecución al script de creación de perfiles que hemos descargado, y ejecutarlo.

Código: php
sudo chmod +x /etc/openvpn/easy-rsa/keys/MakeOpenVPN.sh
cd /etc/openvpn/easy-rsa/keys
sudo ./MakeOpenVPN.sh


Se nos pedirán datos acerca de la localización de los ficheros de claves de la CA. Si todo va bien, recibiremos un mensaje de éxito y tendremos creado nuestro perfil de cliente.



Hecho esto ya tenemos nuestro perfil creado. Procedemos a copiarlo al directorio home de la Raspberry Pi, hacernos con su propiedad, y copiarla en otro dispositivo mediante herramientas como scp (en sistemas Linux) o Bitvise (en sistemas Windows).






NOTA IMPORTANTE: Antes de probar que todo marcha, ¡recuerda configurar el Port Forwarding de tu Router! Deberás hacer que el puerto UDP 1194 se redirija a la interfaz de red de la Raspberry que esté conectada al Router. Además, podría ser conveniente configurar un DHCP Lease para que siempre se asigne la misma dirección IP a nuestro servidor VPN.

NOTA IMPORTANTE 2: En ocasiones, el autoarranque del servicio de OpenVPN en la Rasberry Pi intentará ejecutarse antes de que se haya establecido la dirección IP de la interfaz. El servicio fallará al intentar asociarse a una IP que no tiene.

Esto puede verse en el fichero de log /var/log/openvpn.log:



Una solución es comentar la siguiente línea del fichero de configuración /etc/openvpn/server.conf, de manera que el servicio no intente asociarse de forma concreta a la IP especificada:



Esto es todo por hoy, chicos. Con todo esto, deberíais tener un servidor OpenVPN por UDP totalmente funcional.

Gracias por leer!
DUDA


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#28

Hola secuaces:

Comenzamos con la serie de entradas dedicada a mi primera vez, a la charla de este Rookie, (Espero que no sea la última), en #CONPilar17.

¿Por qué una serie de entradas? ¿Por qué no compartir directamente la presentación? Porque considero que es mejor así, donde puedo explicar todo, con todo lujo de detalles, y responder dudas de una forma más cómoda, en el supuesto caso en que las hubiera. Sin más.

Y ¿De qué hablé? Pues de lo único que tengo: la curiosidad. Del hecho de que ser curioso NO es una opción; De que la curiosidad NO es una opción.

El ser humano es curioso por naturaleza, aunque no todos lleven esa curiosidad a la práctica, o no siempre la llevemos a cabo. Porque seamos sinceros: muchas veces se nos olvida.

En el campo Forense por el que me muevo, cabe, más aún, demostrar ser más curiosos. Porque la curiosidad es una premisa fundamental: es una necesidad. El Forense, cuando ve algo que no conoce, (Un proceso, un fichero prefetch, una extensión, una cabecera, ...), debe investigar y saber su procedencia, y debe saber cómo funciona el software que ha sido ejecutado en una máquina.

Seamos sinceros, nuevamente ¿Cuántas veces hemos ejecutado una herramienta sin saber qué hace realmente?¿Cuántas veces hemos actuado por pura inercia? Por ejemplo, Se ha perdido 'X' información. Nos limitamos a recuperarla por inercia, y punto. ¿Y la curiosidad? ¿Por qué pasan las cosas? ¿Cómo funciona esto o aquello? ¿A qué huelen las nubes? Muchas veces, la curiosidad nos puede allanar el camino. Y sobre todo, aprenderemos de ella, y con ella.

La exposición trataba sobre la realización de un análisis forense de un hipotético caso en el que se empleaba una herramienta antiforense muy específica, (USBOblivion), en su versión 1.11.2.0. Y el caso que expuse fue, que un Administrador de Sistemas, llegó a su puesto de trabajo antes de su jornada laboral, (Muy habitual esto, ¿A que sí?), y observó cómo otro empleado de la empresa estaba haciendo un uso indebido del equipo de su encargado: Una estación de trabajo que corría sobre un Sistema Windows 7, con un usuario con privilegios de administración, y sin contraseña, (porque claro, es Jefe). ¿Os suena? Por ese motivo, el Administrador de Sistemas, que es un tío muy curioso, y que se preocupa por saber y por el buen hacer, procedió a adquirir las evidencias oportunas, dado que sospechaba que hubiera extraído algún tipo de información.

Para ello, primero adquirió la memoria RAM del Sistema, usando la herramienta DumpIt.



Una vez se aseguró de que la imagen del volcado de memoria se generó de manera satisfactoria, desconectó el Sistema directamente del cable de alimentación y procedió a la adquisición en bruto del disco duro, usando para ello la herramienta Guymager.



Una vez hubo completado este proceso de adquisición del disco duro, se aseguró de que las dos imágenes generadas, (Volcado de memoria y Disco Duro), estuvieran correctas.



El objetivo, el alcance del análisis nos lo dejaron claro: Averiguar todos los dispositivos conectados al sistema, descubriendo cuál fue el último en hacerlo, justo antes de la intervención de este Administrador de Sistemas.

Os adelantaré que, para simular este caso, conecté estos ocho dispositivos de la imagen de abajo. Primero conecté los seis Pendrives. Antes de la intervención, que se hizo con el disco duro blanco Intenso, procedí a conectar el disco duro negro Toshiba, (Con el que me llevé del sistema un fichero de imagen), por lo que va a ser ese el que nos interese identificar.



Y una vez que tenemos las imágenes en nuestro poder, (además de hacer un par de copias de más), ¿Qué tenemos que hacer? Siempre hay que comenzar identificando y comprobando las evidencias.

Para ello, usamos 'file' con ellas. Simplemente porque las apariencias engañan, (Pueden estar los datos corruptos, no ser lo que dicen que son, ...). Este comando 'file' detecta el tipo y formato del fichero, analizando su encabezado. Calculamos su huella digital, su firma hash, que debemos cotejar con la que nos entreguen.
Código: php

file IncidenteFuga.dd

sha1sum IncidenteFuga.dd

cat IncidenteFuga.info | grep 6b492eecb4d007e5bde7884f8f58736c10503b3e




Con el volcado de memoria, hacemos lo mismo. Primero le pasamos el comando 'file' al fichero de imagen. Después, usamos Volatility, (Existen varias opciones para instalar este Framework),  e identificamos tanto su sistema, a través de 'imageinfo', como su fecha de adquisición.

Código: php
sudo apt-get install volatility

file VIRTUALBOX-20161216-060955.raw

vol.py -f VIRTUALBOX-20161216-060955.raw imageinfo


Las fechas son un factor crítico, bajo mi punto de vista. Y siempre, también bajo mi punto de vista, tiene que ser la fecha del volcado de memoria, anterior al de la adquisición del disco duro.



Podríamos decir que ya tenemos identificadas las evidencias pero, para mí, aún no lo están como debieran. Para seguir con este paso de identificación, se hace necesario montar el fichero de imagen del Disco Duro en el laboratorio forense, usando el comando 'mount'.

Para ello, usamos el comando 'fdisk', que nos mostrará toda la información relativa al disco duro, (Tamaño del disco, tamaño de los sectores, número de sectores, particiones, ...). De estos resultados, nos queramos con el tipo de partición que presenta el disco, el tamaño del sector y el comienzo de la partición que vayamos a montar.

Código: php
fdisk -l IncidenteFuga.dd




¿Por qué? Porque a la hora de montar el fichero de imagen, debemos especificar, entre otros parámetros, la dirección exacta del punto de montaje, que se calcula multiplicando el sector de inicio de la partición por el tamaño del sector.

Código: php
sudo mount -t ntfs-3g -o ro,offset=105906176 IncidenteFuga.dd /mnt/windows_mount


También podemos emplear esta otra línea, en lugar de calcular antes el punto de montaje

Código: php
sudo mount -t ntfs-3g -o ro,offset=$((512 * 206848)) IncidenteFuga.dd /mnt/windows_mount


En cualquier caso, tened muy en cuenta que, siempre se deberá montar la imagen en modo de sólo lectura.

Código: php
ls /mnt/windows_mount




Y una vez que tenemos montada la imagen del disco duro, y como soy muy desconfiado, quiero terminar la identificación de los ficheros como se merecen, para comprobar que realmente ese volcado se corresponde al Sistema que contiene la imagen del disco duro, tomando un valor que considero único: La fecha de instalación.

Podréis decir... ¿Y si la empresa usa sistemas clonados?¿Si usa maquetas, por ejemplo? Pues tomaríamos otros datos como referencia. Por ejemplo, la fecha de creación de un usuario, la fecha de último login de un usuario, ... Fechas.

Para ello, vamos a hacer uso de RegRipper.

Código: php
git clone https://github.com/keydet89/RegRipper2.8.git




Vamos a usar el plugin 'winver', sobre el fichero del Registro de Windows 'Software', de la máquina que hemos montado. De esta forma obtenemos la fecha de instalación del Sistema.

Código: php
perl rip.pl -r /mnt/windows_mount/Windows/System32/config/SOFTWARE -p winver




Para el volcado de memoria, usamos Volatility, primeramente con su plugin 'hivelist', que nos lista los Registros disponibles en el volcado, y usamos después 'printkey' junto con el 'offset', (La dirección), de la clave que queremos que nos muestre.

La fecha que nos aparece está en formato Unix, pero la convertimos con el comando 'date'.

Código: php
vol.py -f VIRTUALBOX-20161216-060955.raw –profile=Win7SP0x64 hivelist

vol.py -f VIRTUALBOX-20161216-060955.raw –profile=Win7SP0x64 printkey -o xfffff8a000206010 -K "Microsoft\Windows NT\CurrentVersion" | grep InstallDate




Las fechas de un sitio y de otro, deben de ser las mismas. En caso contrario... ya sabéis.

También podemos otras herramientas, o servicios online para realizar la conversión, como este: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Gracias por leer!
DUDA

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#29
Noticias Informáticas / Caída mundial de Whatsapp
Mayo 03, 2017, 06:46:58 PM
El servicio de mensajería sufre una avería, la tercera en los últimos días.

Whatsapp ha sufrido una caída en el servicio a nivel mundial. Los usuarios del servicio de mensajería habrán notado, sobre las 22 horas, que tanto la aplicación del móvil como la de escritorio en el ordenador ha empezado a fallar. No hay explicación oficial de Whatsapp, pero varias webs especializadas en detectar los fallos en la aplicación, como No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, han registrado un pico de incidencias y miles de comentarios de usuarios de todo el mundo.Según varias informaciones, los inconvenientes en el uso del Whatsapp estarían relacionados con los servidores de la compañía, que afronta en las próximas fechas cambios en su estructura informática que podría llevar a la popular aplicación a estar basado en la nube, como hace Telegram. Ni Whatsapp, ni Facebook han comentado nada a nivel oficial por el momento.Whatsapp pertenence a Facebook, compañía que ha anunciado este mismo miércoles,a través de su dueño y fundador Mark Zuckerberg, que 1.200 millones de personas usan la aplicación de mensajería al mes.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#30

La industria del software es relativamente joven. Constantemente está redefiniéndose a sí misma. Y por ello cometemos errores. Uno de los que más daño hace a muchos productos de software es malinterpretar el valor de una categoría tan importante en un equipo técnico como el del Programador Senior.

Basándose en las necesidades de la industria se ha ido entregando ese título a la ligera. Debido, quizás, a la falta de gente con más experiencia de valor y la propia autocomplacencia de que al estar programando una cierta cantidad de años (a veces un par de ellos), se pueda dar el salto de Junior a Senior. Un grave error.

Simplificando las etapas de un programador nos encontramos tres momentos profesionales: programador junior, intermedio y senior. Cada uno de ellos representa una fase distinta en la que la mente de un programador evoluciona y va a aprendiendo de gente con mayor conocimiento y experiencia.

Programar es una tarea compleja y no debería medirse en años "picando código". Los años de experiencia son muy distintos entre diversos programadores que han ido alcanzando metas y evolucionando en el camino al de otros que han vivido una repetición constante del mismo año sin evolucionar.

Existen distintos tipos de programadores: desde los más apasionados hasta los que van a la oficina a pasar de la forma menos dolorosa el día sin complicaciones. ¿A quién crees que deberías poner la etiqueta de senior si todos tienen la misma experiencia en x años?


  • El eterno junior. No es conflictivo pero se limita a aplicar lo que le funcionó con anterioridad.
  • Los "francotiradores de tareas" que se limitan a sacar las tareas sea como sea con la solución que menos esfuerzo implique. Abocando al equipo a que acabe explotando el producto en el futuro sin remedio. No quieren evolucionar ni se lo plantean.
  • Los programadores gregarios, usando la terminología ciclista, están enfocados en el código (pero ojo haciéndolo bien bien). Su foco es plasmar en código los requisitos y cumplen los patrones marcados por la gente de más experiencia o los líderes del equipo.
  • Los programadores que empujan al equipo, motivados y con ganas de hacerlo mejor. Estos son los más valiosos, los que cada día aprenden y evolucionan ellos mismo y al equipo. Van superando etapas y adquiriendo la etiqueta de senior con su trabajo diario.

CitarProgramar es una tarea compleja y no debería medirse en años "picando código"

¿Cómo dar el salto? ¿Cómo empujar a un programador Junior?

Un programador Junior sale de la universidad con las ideas muy claras, pero se topa con un mundo profesional confuso y tarda en darse cuenta que lo que ha aprendido en las aulas no vale de nada. Necesita un mentor, idealmente alguien con mayor experiencia que él, que le guié y, sobre todo, le ayude a apreciar el contexto de muchas decisiones de diseño que tomará en su carrera.

La autocrítica y la inquietud de hacer cada vez mejor las cosas es fundamental. ¿Alguna vez os ha pasado descubrir código que hicistéis hace un par de años del que en su día estabáiis orgullosos y ahora mismo simplemente apesta? Esas es una de las actitudes de mejora continua que hacen evolucionar a los programadores y mejorar día a día.

No debes limitarte a aprender a picar código, si no a tomar decisiones de programación. Limitarse a mirarse en el código es un error. Por supuesto que hay que obtener la maestría en el lenguaje, el framework o las herramientas que usas pero eso no te llevará a saltar de nivel. Necesitas pensar menos en código y pensar en patrones, arquitecturas y, en definitiva, en el contexto presente y futuro de lo que estás desarrollando para equilibrar tus decisiones de programación.

CitarLa autocrítica y la inquietud de hacer cada vez mejor las cosas es fundamental.

¿Qué factores distinguen a un programador senior?

Algunos de los rasgos que distinguen a un senior frente a un junior o un programador intermedio son varios, quizás haya muchos más, pero algunos de los fundamentales son:

  • Ha aprendido de sus errores. Los años de experiencia se denotan por haber recorrido ese camino con anterioridad. Haber cometido errores es bueno cuando se ha aprendido de ellos. Ese es el valor de un senior: haber estado antes en alguna situación complicada y anticiparse en el futuro para no volver a caer en ese error.
  • Empujar al equipo. Un programador senior se siente responsable de la marcha del equipo. No hay excusas argumentando que eso no es su problema. Rema junto al equipo y asume de forma automática la resolución de los problemas.
  • Sabe delegar. Es consciente que, aunque pueda tardar menos o aportar un código de mayor calidad a la primera, debe guiar al resto del resto del equipo para conseguir lo mismo y transmitir sus conocimientos.
  • No está centrado en el código. Ve más allá del alcance de un proyecto. Al fin debe llegar a un compromiso entre distintos factores: calidad, tiempo, recursos, requisitos, etc.. Sabe tomar la decisión más equilibrada basada en el contexto.
  • Tiene ciertas especialidades sobre frameworks, lenguajes, librerías, entornos de programación, patrones de diseño, etc.. Pero lo más importantes es que sabe adquirirlos con facilidad.

CitarNo está centrado en el código. Ve más allá del alcance de un proyecto.

Lo importante es valorar la mejor actitud para el equipo

Simplificar estos conceptos nada triviales en los anteriores puntos no debe limitar la elección del correcto programador senior para tu equipo. Los años de experiencia son un buen punto de partida, pero como comentábamos hay mucho detrás. Hay que dar oportunidades a todos de demostrar su valía.

Puede que el chaval que lleva 3 años programando sea considerado mejor que lleva 10 años estancado o al revés. Repito: no es un ciencia cierta, lo importante es valorar las mejores actitudes para el equipo. Algunas de ellas las hemos dejado en este post pero podéis aportar las vuestras en los comentarios.

Fuente: GenbetaDev
#31

Cuando escribimos código es importante seguir ciertas normas, buenas prácticas, reglas de estilo, coherencia en el mismo,... pero en ocasiones esto no es tan fácil, y más cuando trabajamos en un equipo en el que, al final, cada miembro tiene ciertas manías. Una forma de mejorar todo esto es utilizando un analizador estático de código.

Para Java tenemos ciertas herramientas como FindBugs, PMD y Checkstyle que llevamos utilizando durante mucho tiempo, pero tienen el problema de que con No tienes permitido ver los links. Registrarse o Entrar a mi cuenta no funcionan correctamente. Para suplir esta necesidad aparece No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

CodeNarc es un analizador estático de código Groovy que permite detectar defectos, malas prácticas, inconsistencias, problemas con el estilo del código,... y mucho más. Se trata de un framework muy flexible que por medio de reglas fácilmente configurables analiza nuestro código para mostrarnos un detallado informe a fin de que podamos mejorarlo.

Añadiendo CodeNarc a nuestro proyecto

Ok, nos hemos decidido a mejorar nuestro código Groovy, ¿cómo añadimos CodeNarc al proyecto? Tenemos diversas formas de añadirlo según nuestras necesidades y tipo de proyecto:


  • No tienes permitido ver los links. Registrarse o Entrar a mi cuenta: Una forma muy sencilla de ejecutar CodeNarc aunque probablemente no la más útil.

  • No tienes permitido ver los links. Registrarse o Entrar a mi cuenta: Probablemente se trata de una de las formas más antiguas de ejecutar CodeNarc. Si tu proyecto todavía se basa en Ant y no has pensado en cambiar a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, esta es tu solución.

  • Desde un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta: Forma muy curiosa de ejecutar el análisis de CodeNarc aunque probablemente poco útil.

  • No tienes permitido ver los links. Registrarse o Entrar a mi cuenta: Si usas Maven como herramienta de construcción de tu proyecto esta será la mejor opción puesto que el plugin se encarga de configurar todo y la integración es muy sencilla.

  • No tienes permitido ver los links. Registrarse o Entrar a mi cuenta: Al igual que en el caso anterior, si Gradle es tu herramienta de build, entonces este es el plugin a utilizar.

  • Adicionalmente también existen plugins para distintos IDEs como IntelliJ y Eclipse, frameworks como Grails y Griffon o incluso para Sonar y Jenkins.

Tipos de reglas

La última versión de CodeNarc, la 0.27.0, incluyeNo tienes permitido ver los links. Registrarse o Entrar a mi cuenta agrupadas en 22 categorías:

  • Básicas: Por ejemplo para comprobar que no hay bloques else or finally vacíos.
  • "Llaves": ¿Cuántas veces habéis visto if o else de una sola línea sin las llaves? Yo personalmente los odio porque son una fuente de bugs a futuro. Podemos activar reglas en esta categoría para que realicen este tipo de comprobaciones.
  • Concurrencia: En esta categoría hay reglas que comprueban la coherencia de nuestro código concurrente cuando utilizamos synchronized o volatile principalmente.
  • Convención: Por ejemplo cuando escribimos un if invertido, un if que puede ser convertido a un operador elvis,...
  • Excepciones: Contiene reglas que fallarán si por ejemplo hacemos un throw de un NullPointerException.
Y existen muchas más como algunas que comprueban imports duplicados, variables sin utilizar, if innecesarios,...

Veamos un ejemplo

Configuración mínima

He creado un pequeño No tienes permitido ver los links. Registrarse o Entrar a mi cuenta basado en Gradle con la configuración necesaria y unas cuantas clases con distintas infracciones para poder comprender mejor cómo funciona CodeNarc. Podeis ir revisando No tienes permitido ver los links. Registrarse o Entrar a mi cuenta de manera individual para comprender mejors los cambios.

Lo primero que hacemos es añadir el plugin al archivo build.gradle y configurarlo:

Código: php
apply plugin: 'codenarc'
...

codenarc {
    toolVersion = '0.27.0'
    configFile = new File(projectDir, 'config/codenarc/rules.groovy')
    reportFormat = 'html'
}


Ahora añadimos el archivo de las reglas. Como veis he habilitado unas cuantas.

Código: php
ruleset {
    description 'Example Project RuleSet'

    ruleset('rulesets/basic.xml')
    ruleset('rulesets/braces.xml')
    ruleset('rulesets/convention.xml')
    ruleset('rulesets/design.xml')
    ruleset('rulesets/dry.xml')
    ruleset('rulesets/exceptions.xml')
    ruleset('rulesets/formatting.xml')
    ruleset('rulesets/generic.xml')
    ruleset('rulesets/imports.xml')
    ruleset('rulesets/naming.xml')
    ruleset('rulesets/unnecessary.xml')
    ruleset('rulesets/unused.xml')
}


Con esto ya podemos empezar con el análisis del código. Sólo tenemos que ejecutar la tarea check para comprobar (en las primeras dos tareas) que se está ejecutando CodeNarc (codenarcMain) tanto para nuestro código como para los tests (codenarcTest). Eso sí, como no tenemos nada en el proyecto el informe no se ha generado.

Código: php
$ ./gradlew check
:codenarcMain NO-SOURCE
:codenarcTest NO-SOURCE
:compileJava NO-SOURCE
:compileGroovy NO-SOURCE
:processResources NO-SOURCE
:classes UP-TO-DATE
:compileTestJava NO-SOURCE
:compileTestGroovy NO-SOURCE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:test NO-SOURCE
:check UP-TO-DATE

BUILD SUCCESSFUL

Total time: 0.67 secs


Añadiendo código de dudosa calidad

Vamos a empezar con algo muy sencillo, simplemente creamos la clase src/main/groovy/demo/Example1.groovy con lo siguiente:

Código: php
package demo

class Ejemplo1 {

}


Si ahora ejecutamos de nuevo la tarea check podemos comprobar que se genera el informe con las infracciones y que además la build falla.



Primer encontramos un bloque con la fecha de ejecución y la versión de CodeNarc con la que se ha generado el informe. A continuación tenemos un bloque de resumen por paquete con el total de archivos con infracciones y también el total de infracciones de prioridad 1, 2 y 3. Después tendremos un bloque por cada archivo en el que vemos todas las infracciones del archivo con la línea de código en donde están y un pequeño fragmento del mismo. Además el nombre de la regla es un enlace a una descripción un poco más detallada de lo que significa.

Añadiendo más código

Creamos a continuación otro archivo en src/main/groovy/demo/Example2.groovy:

Código: php
package demo

class Example2 {

    boolean isEvenNumber(Integer number) {
        if (number % 2 == 0)
            println "The number $number is even"
        else
            println "The number $number is odd"
    }

    void lorem() {
        println 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis volutpat fermentum enim. enean in viverra arcu.'
    }
}


Y si ejecutamos de nuevo CodeNarc vemos que tenemos nuevas infracciones: Sentencia if sin llaves, sentencia else sin llaves y longitud máxima de una línea.



Configurando y deshabilitando reglas

Lo primero que queremos evitar es que CodeNarc haga que falle la build cuando tenemos alguna infracción. Para ello, añadimos a la configuración en build.gradle:

Código: php
codenarc {
    ...

    ignoreFailures = true
}


Ahora ejecutándolo de nuevo veremos que la build no falla. Aún así seguimos teniendo infracciones con las que puede que no estemos de acuerdo o que queramos personalizar de cierta forma.

Vamos a deshabilitar la regla ClassJavadoc porque aunque sea una buena práctica escribir el Javadoc de todas nuestras clases públicas, para este proyecto de ejemplo no nos interesa.
Para ello, primero tenemos que buscar en qué categoría está incluída la regla. Esto podemos hacerlo directamente en el No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Después, editamos el archivo de reglas rules.groovy para deshabilitarla:

Código: php
ruleset {
    ...
    ruleset('rulesets/formatting.xml') {
        'ClassJavadoc' {
            enabled = false
        }
    }
    ...
}


Si ahora generamos de nuevo el informe vemos que hemos "arreglado" esas infracciones.



Adicionalmente, también podemos excluir una regla en una clase concreta. Imaginad que necesitamos la clase vacía creada anteriormente pero no queremos ni desactivar la regla (porque entonces no detectaría más clases vacías) ni queremos tener de manera perpetua esa infracción en el informe. Para ello podemos hacer uso de la anotación @SuppressWarnings de Java:

Código: php
package demo

@SuppressWarnings('EmptyClass')
class Example1 {

}


Y entonces, sólo para ese archivo esa regla concreta es ignorada:



Otra opción que tenemos disponible es configurar algunas reglas para adaptarlas a nuestras necesidades. Así, anteriormente vimos en el ejemplo 2 que teníamos una infracción de tipo LineLength porque una línea era mayor de 120 caracteres. Imaginemos que hemos decidido que queremos permitir líneas de hasta 130 caracteres:

Código: php
ruleset {
    ...
    ruleset('rulesets/formatting.xml') {
        ...
        'LineLength' {
            length = 130
        }
        ...
    }
    ...
}


Haciendo esto "arreglaríamos" de nuevo esta nueva infracción.

¿Y como configuro esto para empezar?

Si no sois muy cuidadosos con el código que escribís y vuestro proyecto tiene cierto tamaño, lo más probable que ocurra nada más instalar CodeNarc es que tengais cientos o incluso miles de infracciones.
Incluso siendo muy escrupulosos es probable que haya algunas reglas que no os gusten o que su configuración por defecto no se adapte a las necesidades del equipo. Mi consejo es que vayais revisando una por una las infracciones, leyendo la documentación de las mismas y decidais si las desactivais, las configurais para que se adapten a vuestro estilo y finalmente, las respetais y corregís.

Una vez decididas las reglas y configuración con las que el equipo se siente cómodo, el paso final será decidir los umbrales para hacer que la build falle. Esto permite tener builds válidas con ciertos niveles de infracciones según la severidad de las mismas pero que, superados esos niveles, la build finalmente falle y os obligue a corregirlas.
Para hacer esto, editamos una vez más el archivo build.gradle:

Código: php
codenarc {
    // Es necesario eliminar esta opción
    //ignoreFailures = true

    maxPriority1Violations = 0
    maxPriority2Violations = 5
    maxPriority3Violations = 9
}


Así, la build no fallará a menos que superemos alguno de esos umbrales.

Conclusiones

Hemos visto por qué es importante asegurar el estilo y la calidad del código en nuestro proyecto y cómo una herramienta de análisis estático de código como CodeNarc nos puede ayudar a conseguirlo. Además también hemos comprobado que es muy fácil de añadir a un proyecto y de configurar y personalizar para adaptarlo a nuestras necesidades.

Porque en ocasiones no basta sólo con creer que escribimos buen código y además también No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, sino que hay que tener herramientas que nos aseguren su calidad, homogeneidad y estilo. Para todo esto cuando se trata de código Groovy, sin duda CodeNarc es el mejor.

Gracias por leer!
DUDA

Fuente: GenbetaDev

#32

La Internet de las Cosas (IoT) nos ha dado ya algún que otro buen susto en el pasado. Los fabricantes no cuidan demasiado la seguridad de estos dispositivos conectados, y eso les ha convertido en objetivo de hackers con todo tipo de motivaciones.

Ahora comienza a extenderse un malware que destroza nuestros dispositivos pero que teóricamente lo hace "por nuestro bien". Brickerbot se encarga de convertir routers, bombillas inteligentes, Smart TVs o cámaras de seguridad IP en "ladrillos" inútiles. El hacker responsable de esa creación, apodado 'janit0r', explica que el objetivo es cambiar una industria que debe prestar mucha más atención a la seguridad de estos dispositivos.

Quimioterapia para una internet enferma

Brickerbot está extendiéndose por todas partes, y además lo hace con nuevas versiones que atacan más y más dispositivos. En los primeros cuatro días de funcionamiento atacó a un total de 1.895 dispositivos, mientras que la tercera versión atacó a cerca de 1.400 dispositivos en tan solo 24 horas.



El funcionamiento del malware es relativamente sencillo: escanea internet para encontrar dispositivos IoT en los que intenta el acceso a través de contraseñas "de serie" que los fabricantes incluyen en sus productos para que los usuarios puedan acceder a su configuración. A partir de ahí borran la memoria de los dispositivos, corrompen sus sistemas de almacenamiento y las desconectan de internet.

¿Por qué hace todo esto? Según Janitor, el objetivo no es inhabilitar esos dispositivos, sino impedir que un malware realmente malicioso tome control de esos dispositivos para incluirlos en una botnet como Mirai. Janit0r explicaba en una entrevista su filosofía:

CitarEl desastre de seguridad en la IoT es el resultado de que compañías con conocimientos insuficientes de seguridad desarrollen potentes dispositivos conectados a internet para usuarios que no tienen conocimiento alguno de seguridad. La mayoría de dispositivos para usuario orientados a la internet de las cosas que he encontrado en la red parecen haber sido instalados prácticamente tal cual abandonaron la fábrica.

El creador de BrickerBot considera su malware como una especie de "quimioterapia para internet", y confiesa que espera que espera que esto ayude a minimizar el número de ataques de denegación de servicio (DDoS) que se están llevando a cabo con botnets de dispositivos IoT. Puede que la forma de actuar de janit0r sea ilegal y no guste a los propietarios de esos dispositivos, pero hay que reconocer que su forma de actuar puede verse efectivamente como algo beneficioso a largo plazo para la seguridad de la internet de las cosas.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#33
Hacking / Construyendo un TAP
Abril 25, 2017, 01:33:22 PM

Muy buenas amigos de lo imposible, hoy les traigo una entrada de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta de como fabricar un sniffer fisco, ¡un Tap!

#¿Qué es un TAP?

Un tap, network tap o sniffer pasivo, es un elemento de red que nos permite duplicar el tráfico de red de una conexión a otro puerto y poder así monitorizar todos los paquetes transmitidos.

Una de las ventajas que tiene sobre un sniffer por software es que al ser un elemento físico no es fácilmente detectable (como lo podría ser un adaptador en modo promiscuo). El tap no tiene capacidad de envío por los puertos de monitorización por lo que no se puede mandar ningún paquete desde estos y no existe conectividad física.

La idea es sencilla, conectamos un cable de origen a destino y entre ellos conectaremos dos cables para pinchar la transmisión y la recepción de paquetes.

#Empecemos

Para ello conectaremos un par de cables al par de transmisión (Tx) y otros dos al par de recepción (Rx). Los cables que pinchamos deben conectarse a los cables de recepción (Rx) de los puertos de monitorización.

Lo podemos ver más claramente en el siguiente diagrama.



Bueno pues sin más rodeos vamos a ver paso a paso como construir un Network Tap con presupuesto muy reducido, menos de 3 euros.

#Materiales


La lista de material y herramientas que vamos a necesitar es:

Conectores RJ45
Cable ethernet
Tenaza Crimpadora
Tubo termorretráctil
Soldador y Estaño
Pistola de pegamento



#Manos a la obra

Lo primero es crimpar cuatro cables ethernet con los conectores rj45, en todos ellos siguiendo la misma serie (blanco-naranja, naranja, blanco-verde, azul, blanco-azul, verde, blanco-marrón, marrón)



Después recortamos y pelamos los cables. Para los puertos de monitorización vamos a dejar solo los cables 3 y 6 (verde y blanco-verde). He elegido cable morado para los puertos de monitorización para que sea más fácil diferenciarlos.





Empalmamos los cables siguiendo el diagrama e introducimos un pequeño trozo de tubo termorretractil en los cables antes de conectarlos para que después podamos cubrir los empalmes.
Los dos extremos de envío y recepción deben conectarse de forma normal y conectar los cables 1 y 2 (blanco-naranja y naranja) un puerto de monitorización y conectar 3 y 6 (blanco-verde y verde) al otro puerto de monitorización.



Los cables 4, 5, 7 y 8 no los vamos a conectar, por lo que nuestro Tap de red funcionara a 10/100 Mbit/s. Al tratarse de un elemento de red pasivo si conectamos un dispositivo Gigabit ethernet reducirá su velocidad hasta los 100 Mbit/s. Es la única opción por ser un elemento pasivo.

Recortamos el sobrante en las conexiones y lo rematamos con un poco de estaño para mejorar la conectividad.



Cubrimos los empalmes con los tubos termorretractiles.



Hemos elegido cubrir el centro de los cables con pegamento de silicona para dar más consistencia y que pueda resistir tirones en el cable de red.





Al final rematamos con un poco de cinta más por una cuestión estética que otra cosa. ¡Y Voilà!



#Jugueteando

Ya podemos empezar a utilizarlo. Cada puerto de monitorización captura una dirección del trafico, transmisión o recepción, por lo que para tener la comunicación completa debemos conectar cada puerto a una tarjeta de red, abrimos Wireshark y ¡boom!





Gracias por leer!
DUDA

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#34

Quizás eres un programador novel que está comenzando a desenvolverse en algún lenguaje de programación y te está constando arrancar o afianzar todos los conceptos nuevos que te vas encontrando. El aprendizaje de un lenguaje de programación es algo que requiere un relativo alto número de horas, por lo que cuánto mayor sea la calidad de ese tiempo que dediquemos mejor serán los resultados.

A continuación, os expongo una serie de tips o consejos (como queráis llamarlos) inspirados en experiencias propias y unos cuantos posts leídos sobre el tema que rozan la temática de la auto ayuda encapsulada en recetas.

Resuelve un problema real

En muchas ocasiones los ejemplos de código de los libros y tutoriales que nos encontramos se basan en simplonas aplicaciones alejadas de problemas reales. Aunque sea una tarea difícil, empieza a crear tus propios ejemplos. Piensa un proyecto real y traslada la aburrida teoría a una posible solución a un problema real.

Crear un proyecto con una aplicación simple y ve añadiéndole mayor complejidad según vayas avanzando. No hace falta que sea grandioso, simplemente hazlo. Te sentirás orgulloso de ir creado algo real, además de servirte para plasmar todo lo que has ido aprendiendo al cabo del tiempo.

Lee buenos libros y cuida siempre hacer buenas prácticas de programación

Para sentar las bases para ser un buen programador es fundamental aprender sobre patrones de diseño y buenas prácticas de programación. Para ello, es interesante contar con libros de referencia como Clean Code o el mítico "Patrones de diseño de Gamma y cía..". No es igual de efectivo conocer la sintaxis de un lenguajes que saber programar bien. Más allá de que el propio código compile, e incluso que funcione, está la buena organización del código y su optima implementación.

Un libro relativamente corto (96 páginas) que habla sobre el tema es Code Simplicity. Un descubrimiento que trata de forma acertada cómo el buen diseño de software es simple y fácil de entender. Nos explica de forma concisa como evitar caer en la trampa de la complejidad del código, lo que provoca en la mayoría de los casos el fracaso del software que desarrollamos.



Elige la tecnología correcta


Tomate tu tiempo en elegir el lenguaje o la tecnología que más se ajusta a las necesidades de tu proyecto. Por lo general, lo buenos programadores son capaces de aprender cualquier lenguaje que ellos necesiten en un corto espacio de tiempo. Es fundamental investigar los pros y contras de cierta tecnología que queramos emplear. No te empeñes en seguir una moda simplemente, quizás al cabo de tiempo te des cuentas que no servía para tu proyecto.

No intentes aprender a programar leyendo o viendo vídeo simplemente

Leerse un libro de programación como si tratará de una novela no sirve de nada. Tampoco verse capítulos de cursos de programación como si fuera una serie de televisión. Ambos casos deben ser apoyados con tocar código e ir practicando poco a poco lo que se está aprendiendo.

Dedica todo el tiempo necesario a configurar tu entorno de programación

Cada lenguaje suele tener un entorno de programación característico, por eso es necesario conocer cada una de las herramientas e intentar personalizarlas al máximo con plugins, esquemas de color, conocer los atajos de teclado más importantes, etc... Cuanto más cómodo te sientas con tus herramientas, mejor atención prestarás a tu código.

No tengas prisas

Ya sabemos que muchas veces la necesidad de aprender un nuevo lenguaje o una tecnología surge un nuevo proyecto que realizar, pero tómate tu tiempo para asegurarte que no te olvidas de nada y comprendes. Cuando surja la tentación de utilizar alguna ñapa, sólo para conseguir que funcione, no lo hagas. Es importante tomarse el tiempo necesario para averiguar como hacerlo de la mejor forma posible.

Haz preguntas

Existen multitud de foros de programación donde plantear nuestras dudas. Uno de los más importantes es No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Crea un perfil y comienza a buscar preguntas. Si no encuentras tu duda escribela, seguro que alguien está dispuesto a echarte una mano.

Escribe y escribe código

No tengas miedo y ve practicando escribiendo código. Ten en cuenta un diseño y un análisis previo pero no tengas miedo a plantarte frente al editor de código y comenzar a crear tus propias funciones. Dale vueltas y refactoriza hasta que te sientas orgullo de tu código. El buen código es el que es bonito de leer y además hace correctamente para lo que está pensado.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#35

Muy buenas amigos de lo imposible, aquí les traigo una entrada de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta muy buena, espero la puedan probar y compartir sus comentarios aquí.

En estos últimos días tuve que realizar unos scan de visibilidad de unos target y debido a la cantidad de información obtenida no era viable su realización manualmente, por lo tanto, empleé herramientas como la FOCA o Metagoofil que descubrí su existencia hace poco a través del canal de Telegram de nuestro blog.

La FOCA todos la hemos empleado y realiza un buen trabajo para ciertas tareas, sin embargo, para otras se encuentra muy limitada y no satisface todas las necesidades, por lo tanto, decidí emplear Metagoofil, que además el compañero Snifer había publicado un post mostrando su funcionamiento. Esta herramienta viene instalada por defecto pero no funciona ;( es necesario cambiar en el código "google.com" por "google.es", sin embargo, en mi caso,al menos cada dos por tres petaba y pasé de emplearla.

Sin embargo, sí me gusto el reporte que hacía y por ello, me piqué un poco y decidí invertir tiempo en mejorar mi herramienta RastLeak, que mostré en la última Hack&Beer de Madrid. Aprecie que RastLeak está bien para tener una visibilidad de documentos indexados en los buscadores así como obtener subdominios en dónde se encuentran dichos documentos, pero le faltaba un buen reporte con los resultados, por ello decidí mejorar esta necesidad y así poder emplearla para los scan de visibilidad que tenía que hacer.

Tras la parrafada sobre los precedentes, vamos a ver los nuevos update de RastLeak:

RastLeak_1_2.py -> Reporte de resultado en json con objeto de ser la entrada en herramientas de gestión de vulnerabilidades.

RastLeak_1_3.py -> Reporte de resultados en json y xlsx. Permite obtener un reporte de resultados en un formato más "elegante" y "usable" como es un excel.

Dichas actualizaciones las tenéis disponibles en mi github.

Al principio, sólo pensé en el formato json pues la salida de esta tool puede ser la entrada en otra y para ello, es necesario manejar ficheros en formatos estándar como es json. Sin embargo, de cara a un reporte, se me ocurrió exportar los resultados en un excel por su usabilidad.

A continuación, se va mostrar una PoC con la última versión, RastLeak_1.3.py



Como target he empleado el dominio No tienes permitido ver los links. Registrarse o Entrar a mi cuenta pues hay que elegir uno. De todo modos, al ser información indexada en buscadores, es información pública.



Como se observa busca resultados tanto para el dominio principal como para subdominios.

Una vez finalizada la búsqueda, da la opción de descargar dichos documentos para extraer los metadatos. Además, da la opción al usuario de indicar la ruta dónde guardar los documentos encontrados haciéndolo independiente del SSOO, pues en la primera versión, se guardan en la ruta /opt/ típica de sistemas Linux.



Una vez hecho esto, se muestran los metadatos extraídos para cada documento y finalmente, se visualiza un reporte de todos ellos categorizándolos por "Author, Producer y Creator", que son los tag's más relevantes.





Como se indicó en las opciones del menú de ayuda, permite la exportación de los resultados de metadatos en formato json o excel. En este caso, se ha seleccionado la opción del formato excel, por lo que se exporta con el nombre "metadata.xslx".





Y accediendo a él, se tienen los resultados con un formato ágil y usable para su tratamiento.



Como se ha comentado también se puede exportar en formato json y a la hora de visualizar las direcciones URL's se puede seleccionar ver el recurso entero o bien los dominios y subdominios en dónde se encuentran.

Esto es todo, espero que os haya gustado y especialmente que os sea útil.

Como es habitual la finalidad de esta herramienta es automatizar tareas manuales con objeto de identificar los resultados indexados de un target, no nos hacemos responsables de su uso para otro fin, no seáis malos.

Cualquier fallo que encontréis (que seguro que los hay) podéis hacer un pull request de github o bien comunicármelo, os lo agradecería.

"La mejor defensa es un buen ataque"

Gracias por leer!
DUDA
#36

Quienes tienen un móvil Android probablemente alguna vez hayan leído o escuchado el consejo de evitar instalar aplicaciones que no provengan de la tienda oficial de Gooogle. Siendo el sistema operativo más usado del mundo es de esperarse que sea uno de los principales objetivos del malware, y una de las formas más sencillas de evitar ser víctima de estos, es limitar lo que instalamos a fuentes confiables.

Y sin embargo, aunque Google ha tomado varias medidas para mejorar la seguridad de su Play Store, no será la primera vez ni la última en la que aplicaciones fraudulentas se cuelen en la plataforma. Pero no deja de ser algo sorprendente y alarmante cuando ocurre un caso como este.

Una aplicación llamada "System Update"

Desde el 2014 y hasta apenas esta misma semana, una aplicación maliciosa con un nombre bastante interesante y sin duda engañoso, estuvo suelta en la tienda de aplicaciones de Google y fue instalada entre uno y cinco millones de veces por los usuarios.

Luego de ser reportado por la firma de seguridad móvil Zscaler, Google retiró de la Play Store la aplicación llamada "System Update", o lo que es lo mismo, "Actualización del sistema". Se trataba de de una app que contenía un spyware (software espía) de la familia SMSVova.

La aplicación era capaz de ejecutar comandos que podrían reportar la localización del usuario a un atacante y cambiar la contraseña del dispositivo. Y, aunque los investigadores no pudieron determinar con que propósito haría esto, no es difícil deducir que no sería con precisamente buenas intenciones.

Es buen momento para recordar que incluso si estás descargando una aplicación desde la Play Store, no confíes ciegamente en ella solo por esto. En el caso de "System Update" varios usuarios habían comentado en las reseñas sobre su comportamiento extraño. Toma en cuenta esto y lee lo que dicen los demás sobre una app, y además usa un poco el sentido común, si luce sospechoso, mejor alejarnos de ello.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#37

CitarNo tienes permitido ver los links. Registrarse o Entrar a mi cuenta y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta lucen iguales pero no lo son, y ni Chrome ni Firefox notan la diferencia

A finales de 2016 les hablábamos del caso del imitador de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, un sitio que gracias al uso de caracteres Unicode utilizaba una letra muy parecida a la "G" mayúscula para hacer pasar su dominio por el del gigante de las búsquedas. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta parece muy normal, pero no lo es.

Esto es conocido como un ataque homográfico, una forma maliciosa de engañar al usuario aprovechándose del hecho de algunos caracteres lucen muy parecidos. Pero esta vez una nueva variación de este tipo de amenaza ha sido descubierta, una que es imposible de detectar porque los caracteres lucen exactamente iguales, y a la que navegadores como Chrome, Firefox y Opera son vulnerables.

El código púny

Para evitar confusiones, cuando se decidió que se podrían usar caracteres Unicode en los nombres de dominio, también se decidió que se utilizaría algo llamado Punycode en su lugar. Por defecto, un navegador debería ser capaz de leer una URL en Punycode y transformarla a caracteres Unicode, pero esto obviamente deja al navegador susceptible de ser víctima de un ataque de phishing disfrazado de dirección web legítima.

Por ejemplo, si alguien registra No tienes permitido ver los links. Registrarse o Entrar a mi cuenta la dirección sería el equivalente de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta deletreada con una "а" del alfabeto cirílico.

La solución de los navegadores para evitar la confusión es mostrar las URLs en Punycode o código púny en lugar de Unicode si la dirección contiene caracteres de diferentes idiomas, como cirílico y latín. Esto identificaría las URLs como intentos de phishing. Pero las URLs en un solo idioma, como chino o japonés, sí serían mostradas como Unicode.



Chrome, Firefox y Opera fallan en detectar el ataque homográfico


El investigador de seguridad chino Xudong Zheng descubrió que esto puede explotarse para el mal, ya que muchas familias de caracteres Unicode contienen variaciones de letras del alfabeto en latín. El mismo registró un dominio en uno de esos idiomas para probar su punto.

Zheng registró el dominio No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y el navegador lo interpreta como No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, y además lo muestra como conexión segura. Puedes comprobarlo tu mismo desde este enlace usando Chrome, Firefox u Opera.

La fuente usada por el navegador hace las URL completamente indistinguible del No tienes permitido ver los links. Registrarse o Entrar a mi cuenta real. La protección contra ataques homográficos de estos navegadores falla completamente cuando cada caracter es reemplazado con uno similar en un solo idioma extranjero. El dominio No tienes permitido ver los links. Registrarse o Entrar a mi cuenta registrado como No tienes permitido ver los links. Registrarse o Entrar a mi cuenta se salta el filtro completamente usando solo letras del alfabeto cirílico.

El bug ya fue reportado a Chrome y Firefox desde enero de 2017, pero solo ha sido reparado en Chrome Canary, y debería estar disponible para los usuarios de Chrome 58 que será liberado a finales de abril. En Firefox el problema sigue en estudio.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#38

Desde hace un tiempo, en los medios cada vez se habla más de la denominada Deep Web o Dark Web. Casi siempre se hace para relacionarla con actividades criminales que se realizan en las profundidades de la red, y muy pocas veces se paran a explicar qué es realmente esa Dark Web. Un ejemplo de ello es que la llaman Deep Web, un término erróneo en la mayoría de los casos.

Por eso hoy vamos a intentar explicarte de una manera sencilla y entendible qué es exactamente la Dark Web, y cual es su diferencia con la Deep Web. Y si tienes curiosidad, también te diremos cómo descargarte y utilizar un navegador especialmente creado para navegar en ella.

¿Qué es exactamente la Dark Web?



La Dark Web está formada por todo el contenido público que está alojado en la World Wide Web, pero que existe en unas darknets a las que sólo puedes entrar a través de un software específico o una configuración concreta de tu ordenador. A su vez, la Dark Web forma parte de la Deep Web, que viene a ser todo ese contenido al que no puedes acceder de forma directa a través de los buscadores.

Por lo tanto, para entenderlo todo tienes que tener en cuenta cuatro conceptos: Clearnet, Deep web, Dark web y Darknet. El más sencillo de entender es la Clearnet, pues es el Internet tal y como lo conoces, las páginas que encuentras en Google y otros buscadores y a las que puedes acceder directamente desde ellos.



El ~90% del contenido de la red no es accesible a través buscadores y eso es la Deep Web, que engloba toda la información a la que no puedes acceder públicamente. Puede tratarse de páginas convencionales protegidas por un paywall, pero también archivos guardados en Dropbox, correos guardados en los servidores de tu proveedor, y todas esas páginas que se crean durante unos instantes, por ejemplo, cuando configuras un buscador de viajes y te muestra el contenido.

Si la Deep Web es el 90% de Internet, la Dark Web ocuparía únicamente el 0,1% de ella. Es una porción de Internet intencionalmente oculta a los motores de búsqueda, con direcciones IP enmascaradas y accesibles sólo con un navegador web especial. La Dark Web por lo tanto forma parte de la Deep Web, pero son cosas diferentes. Por ejemplo, si la Deep Web fuera una ciudad, la Dark Web serían varios barrios. Forman parte de la ciudad, pero no son la ciudad.



La Dark Web es el contenido que puedes encontrar en diferentes Darknets, que son cada una de las redes a las que sólo puedes acceder con programas específico. La más popular es TOR, pero también tienes otras Darknets como Freenet, I2P o ZeroNet. Aunque se define la Dark Web como una zona no indexable por buscadores convencionales, en algunas Darknets se han creado buscadores capaces de indexar su contenido.

También es importante dejar claro que la Dark Web no es mala por definición, que muchos de sus mitos son falsos y que tiene bastante páginas con contenido constructivo. Además, la Dark Web sirve como cobijo a activistas perseguidos en países especialmente férreos con la libertad de expresión, y ayuda a que otros puedan saltarse las censuras locales para acceder a la información.

Cómo entrar en la Dark Web



Cada Darknet tiene su método de entrada, pero teniendo en cuenta que la de TOR es la más popular de la Dark Web, es ahí donde te vamos a enseñar a entrar. Lo primero que tienes que hacer es ir a la página de Tor Browser, pulsar en Download, y elegir la versión en tu idioma y sistema operativo para descargártelo. Se trata de un navegador basado en Firefox especialmente creado para entrar en TOR sin tener que configurar nada. Sólo lo abres y te conecta automáticamente.



Elige la carpeta de destino e instálalo, después ejecuta el navegador. Verás que este no se abre automáticamente, sino que primero te muestra una ventana que te indica que estás conectándote a la Darknet de TOR. Al finalizar, Tor Browser se abrirá y podrás navegar con él tanto por la Clearnet como por la red de Tor. Viene con el buscador DuckDuckGo configurado para encontrar también páginas .onion, el dominio de las webs de esta Darknet.



Un buen punto de partida es buscar "The Hidden Wiki" y entrar al primer resultado aunque sea una página .com. En ella verás una gran cantidad de páginas .onion y su descripción en inglés ordenadas por temáticas. A partir de ahí ya sólo te queda ir visitando las diferentes páginas y navegando por su contenido.

Es normal que las páginas de la red TOR carguen extremadamente lentas, algo que es debido al cifrado de anonimización de la propia red. Precisamente por eso también notarás que la mayoría de ellas parecen sacadas de hace dos décadas, ya que por lo general están creadas en HTML sencillo y sin demasiadas florituras.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias por leer!
DUDA
#39
#Disclosure

Buenos días amigos de lo imposible, lo que vengo hoy a contaros en realidad es un public disclosure de lo que considero un fallo de seguridad del chrome (ellos no lo consideran tal). Previamente a este disclosure el día 20 de marzo me puse en contacto con ellos para comunicárselo, y aunque reconocen el ataque e incluso le pusieron nombre, decidieron que no era fallo del navegador (y por supuesto que para mi lo es).

Antes de que lo arreglen diciendo que no lo van a hacer, no sería mi primera vez (google es muy de eso). Prefiero hacer el public disclosure.

CitarDoes this fall into the category of "working as intended"?  Have the reporters invented "printjacking?"

En realidad, ellos se escudan/defienden en la mala configuración del servidor atacado. Pero entonces ¿por qué existe el XSS auditor de chrome? Si es una mala programación de la web, tampoco es del navegador, ¿por qué existe el bloqueo de contenido mixto http/https? Es otra mala configuración por parte de la web visitada, y así cada una de las protecciones existentes en el navegador.

El enlace de la conversación es el siguiente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta aunque es privado y no tendréis acceso.

Cabe decir que el fallo no es reproducible en FireFox, y se trata de un fallo que requiere de algo de ingeniería social. Sin mas dilación, paso a detallar su funcionamiento, paso a liberar el "Printjacking".

#Breve introducción

Para entender el fallo primero hay que tener unos conocimientos breves del CORS. El estándar de CORS es un mecanismo mediante el cual se definen si una petición web tiene que ser o no bloqueada según que criterios, el bloqueo se realiza por medio de las siguientes cabeceras:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

También existe una cabecera que es 'No tienes permitido ver los links. Registrarse o Entrar a mi cuenta' que impide poner una página dentro de un iframe. Os animo a estudiar dichas cabeceras http.

Que se puede hacer con toda esta ristra de cabeceras, pues bloquear por ejemplo, que una página web se pueda incrustar en un iframe (al igual que se haría en un CSRF) o que no se pueda hacer si el origen no es del mismo host o de otro en concreto (a grandes rasgos). Hasta ahí bien, ¿no?

#Liberando al kraken

Vale pues supongamos el siguiente escenario tan común.

Un router o una web tiene una llamada api, mediante la cual sacas datos del usuario (incluso la contraseña he llegado a ver), básicamente cualquier tipo de información sensible que el atacante quiere obtener. ¿Cómo podría enviarse el atacante el contenido de esa web?

Estamos pensando en que crearíamos una web maliciosa (al estilo de un CSRF cualquiera) y en un iframe, cargaríamos la página que no está protegida con las cabeceras anteriormente descritas. Pero, ¿qué maneras tengo de enviarme esa información o de robarle los credenciales? Las ideas que se me ocurrieron para esta tarea fueron las siguientes:

Acceder por el dom, vía javascript y enviármelo por una petición AJAX (el navegador lo bloquea)
Utilizar las funciones de captura de pantalla de Html5 para hacer una captura del iframe, ocultarlo e enviármelo (el navegador lo bloquea nuevamente, curiosamente la zona capturada del iframe, viene en blanco)
Pedirle amablemente al señor que envíe el contenido de la página (veamos de que manera podemos hacerlo sin que se de cuenta)



Estuve estudiando la manera hasta que dí con una forma 100% efectiva. El "Printjacking".

Consiste en engañar al usuario para que imprima una página, que secretamente tiene el iframe oculto detrás de una imagen, con la información sensible. A modo de "imprima su billete de avión", "gane un iphone 7" o cualquier otro engaño.

Si conseguimos que ese usuario nos envíe el pdf resultante o el xps de esa impresión, tendremos en nuestro poder la información sensible (ya que irá incrustada dentro del documento), ¿easy no? El equipo de chrome, dice que sería igual que convencerlo de que me envíen la página web dando a "guardar como". Pero seamos serios, la gente está acostumbrada a trabajar con pdf o xps, un html no saben ni lo que es, y además por javascript no podemos invocar dicha opción y darlos el trabajo hecho.

Tenéis todo el código de la prueba de concepto en mi github No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como el comportamiento es diferente para pdf y xps, os enseño las poc correspondientes.

#POC en PDF



#POC en XPS



¿Estamos asistiendo al nacimiento de una nueva técnica de phising debido a la despreocupación del equipo de chrome?

Espero que os haya gustado, no seáis malos y disfrutéis de unas maravillosas y merecidas fiestas. ¡Hasta la próxima!

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias por leer!
DUDA
#40
Hacking / Acccheck: Ataque por Diccionario a Windows
Abril 17, 2017, 04:58:26 PM

Hola muy buenas a todos y todas los amantes de la seguridad informática, en esta ocasión voy a presentar una sencillísima pero a la vez muy interesante herramienta que nos permite realizar un ataque de diccionario sobre equipos que utilizan el protocolo SMB.

El programa en cuestión es Acccheck  el cual fue creado por Faisal Dean, está escrito en Perl, se distribuye bajo una licencia GPLv2 , actualmente es mantenida por los desarrolladores de Ubuntu, su versión actual es la 0.2.1 y viene instalado de forma nativa en KALI Linux listo para usar.

¿Qué nos permite hacer Acccheck?

Bien, supongamos que estamos auditando una red y que por algún motivo necesitamos la contraseña de un equipo para continuar con nuestra auditoría. Pues en ese caso Acccheck nos viene como anillo al dedo. Pero: ¿y si no conocemos ni el nombre de usurario ni su dirección ip?, ¿y si necesitamos los usuarios y sus contraseñas de muchos equipos e incluso de todos los equipos de la red?, ¿podríamos escanear más de un host con una simple orden desde la terminal o estamos limitados a ir uno a uno?

Acccheck es una herramienta muy sencilla pero potente y debido a que utiliza ataques por diccionario realmente solo necesitamos conocer cuál es la red que vamos a atacar  (192.168.1.0/24, 192.168.10.0/24) y tener listos los tres diccionarios que vamos a utilizar para atacar todos los equipos que necesitemos (el diccionario de posibles contraseñas, el de posibles usuarios, y uno de direcciones ip). Si conocéis la dirección ip de un equipo no haria falta el diccionario correspondiente, lo mismo sucede con la de nombre de usuario y la contraseña.

Ahora que ya sabes todo lo que puede dar de si esta herramienta vamos a ver todos sus parámetros de forma detallada:

-t: Permite atacar una única dirección IP
-T: Permite atacar a múltiples direcciones IP
-p: Permite probar una única contraseña
-P: Permite probar múltiples contraseñas
-u: Permite probar con un solo nombre de usuario
-U: Permite probar con múltiples usuarios
-v: Activa el modo verbose

Una opción muy interesante que viene por defecto en Acccheck es la de encontrar el usuario administrador cuya contraseña está en blanco.

Para ello basta con escribir en la terminal  lo siguiente: acccheck -t  192.168.1.0

Nota: cómo podemos observar debemos de prestar especial atención a las mayúsculas y minúsculas siendo las primeras para indicar un la dirección de un diccionario o lista y la última para indicar un solo parámetro.

Además nos podemos ahorrar el trabajo de escribir la dirección de un diccionario, basta con arrastrarlo y soltarlo en la terminal.

Algunos ejemplos de uso:

Averiguar la contraseña del usuario Administrador del equipo cuya ip es la 192.168.1.3:
acccheck  –t 192.168.1.3 –u Administrador –P '/root/Escritorio/diccionario_contraseñas'

Averiguar el nombre de todos los usuarios sus respectivas contraseñas   y cuáles son sus direcciones ip:
acccheck  –T '/root/Escritorio/listado_ips'  –U '/root/Escritorio/diccionario_usuarios'  –P '/root/Escritorio/diccionario_contraseñas'

Si en el futuro tienen alguna duda siempre pueden consultar el manual escribiendo acccheck en la terminal.



¿Acccheck se puede utilizar para auditorias?

Como hemos visto un poco más arriba Acccheck nos permite listar todos los equipos cuyos usuario Administrador no tiene una contraseña algo que nos pone los pelos de punta a todos los administradores de sistemas pero ¿se podría usar para auditorias? sí, para comprobar la robustez de las contraseñas en pequeñas redes o empresa sin un servidor de Active Directory o políticas de grupo que administren las de las contraseñas (mínimo de caracteres, mayúsculas, caracteres especiales,... etc).

¿Qué utilidad tienen esos datos?

Si tenemos acceso físico nos podríamos simplemente logear con la información que hemos obtenido al realizar nuestro ataque.
Para escalar privilegios siempre y cuando consigamos una cuenta con permisos de administrador.
Podríamos unirnos al dominio y tener acceso a todos los recursos que tenga el usuario suplantado como por ejemplo ver el contenido de carpetas compartidas, impresoras en red.
Incluso si la cuenta del usuario al que estamos suplantando es un perfil móvil seria como si fuéramos uno empleado más de la empresa.

Ejemplo práctico

Un ejemplo de un caso real de uso sobre win10 con todas las actualizaciones hasta la fecha y el antivirus AVG activo junto con el firewall de Windows 10.



Ventajas  y desventajas de usar esta herramienta:



Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Gracias por leer!
DUDA