EtiquetaTips

Seguridad del sistema de Servicio de Impuestos Internos (SII): Algo anda mal …

En el post anterior ya vimos cómo el mismo sistema de servicios de impuestos internos (SII) violaba la seguridad de nuestras contraseñas; en este nuevo post comentaré las recomendaciones de seguridad que aparecen publicadas en el sitio web del SII y tambien analizaré el manual de configuracón para la utilización de ingreso mediante certificado digital o firma electrónica.

En este link, pueden ver las Recomendaciones de Seguridad, donde dan los siguientes consejos:

  • Nuestro Servicio sólo envía correos de carácter informativo, no se adjunta ningún link o documento que deba descargar.
  • El Servicio nunca solicitará respuesta a los correos electrónicos.
  • Nunca se solicitará datos personales, rut ni su clave secreta.
  • Si le solicitan este tipo de información puede estar siendo víctima de un fraude, provocado por un phishing, virus o troyano.
  • Escriba la dirección completa www.sii.cl en su navegador de internet y asegúrese de hacerlo en lugares conocidos.
  • Mantenga su computador actualizado con sus parches y antivirus al día para protegerlo de software malicioso.
  • Si su navegador (Firefox, Explorer, Chrome u otro) le ofrece “volver a recordar clave”, no lo acepte nunca.
  • No permita que otros vean su clave secreta.
  • No ocupe la misma clave del SII para otros sitios en Internet.

Seguir leyendo

Solución al no-cambio de hora en Chile

En Chile, nuevamente el Gobierno cambió la configuración de la zona horaria, aplazando el cambio de hora que debería haberse hecho hoy, para el 28 de Abril.

La medida, que replica el esquema adoptado el año pasado, establece que el horario de invierno entrará en vigencia la medianoche del Sábado 28 de Abril y posteriormente, se retornará al horario de verano, la medianoche del Sábado 1 de Septiembre.

Para UNIX existe una solución que es modificar el archivo que define el TimeZone de Chile/Continental. Esta solución es mucho más limpia que cambiar la hora a mano o que usar la zona horaria de otro país, ya que continuamos usando la zona horaria de Chile pero con las modificaciones que el gobierno impuso.

La solución rápida es descargar este archivo “timezone” que modifiqué con las nuevas fechas, descomprimirlo y pisar el archivo /etc/localtime y en el directorio donde tengas los archivos de zona que generalmente se encuentran en /usr/share/zoneinfo/Chile/Continental.

Seguir leyendo

Manipular volúmenes lógicos (LVM) en discos virtuales

Me refiero a discos virtuales a los que creamos usando dd. Cuando creamos un disco utilizando por ejemplo dd if=/dev/zero of=imagen.img y lo usamos para crear una máquina virtual, en este caso con Xen, luego le instalamos un sistema operativo que maneje ya sea CentOS, RHEL, Debian o cualquier otro que maneje LVM en la instalación, hay veces que necesitamos manipularlo ya sea para clonarlo, hacerle mantención o simplemente montarlo para ver los archivos. En mi caso, tuve que clonar la máquina virtual en caliente y quedó el FS corrupto, por lo que tuve que corregirlo, tambien sirve para hacer tareas de mantención como aumentar o disminuir el tamaño del disco o volúmenes lógicos.

Tengo mi disco original llamado “vm1.img” y la clono simplemente con un cp o bien con “dd if=vm1.img vm1_clon.img“, paso a paso, lo que tenemos que hacer es:

  1. Crear un dispositivo “loop” en base a nuestro disco virtual
  2. Mapear el dispositivo loop creado
  3. Revisar los dispositivos creados en /dev/mapper/
  4. Activar el volúmen y realizar las tareas necesarias

Las herramientas que usé son losetup, kpartx y vgchange.

Seguir leyendo

Mini-Post: Acceso directo a archivos de descarga

Una forma de hacer un bypass a los sistemas de autenticación es poder acceder a archivos “sensibles” que sólo un usuario con autorización debería poder ver. Existen muchos sitios que tienen panel de administración pero no protegen los directorios donde se encuentran los archivos, por ejemplo, imaginemos que el usuario “admin” subió un archivo con datos de acceso a un servidor y en el sistema configuró que sólo algunos usuarios puedan verlo, sin embargo, cualquier persona que se sepa la URL puede acceder a el … Aunque suene bastante simple e incluso estúpido, es lamentable que existan sistemas o sitios web que lo permiten.

Por lo general, esto sucede cuando no existe una capa intermedia entre el archivo y el sistema, sino que se linkea directamente. Algo que debería ser https://www.dominio.cl/sistema/index.php/descargar/949394 es https://www.dominio.cl/sistema/admin/archivos/usuarios_y_passwords.docx, y en el peor de los casos hasta se puede eliminar el nombre del archivo y listar el contenido del directorio “archivos” 😉

Los sistemas web deberían manejar internamente un “id” o nombre ficticio del archivo, hasheado y mapeado al momento de subirlo, para no permitir que cualquier usuario pueda acceder. Por ejemplo, si tenemos la URL de prueba dada anteriormente, 949394 correspondería al ID del archivo, el sistema debería -internamente- hacer una consulta a la base de datos y ver a que archivo corresponde ese ID, luego ver quienes tienen permisos para acceder a ese archivo y, luego de verificar la sesión y permisos, permitir la descarga del archivo.
Para evitar la descarga directa de los archivos, el directorio “uploads” debería estar fuera del directorio de la aplicación, por ejempo, si el directorio de la aplicación es /var/www/html/sistema1/, el directorio debería estar fuera de “sistema1”, sino, aunque hagas todas las validaciones posibles, de todas formas se podrá acceder directamente al archivo saltandose la validación de la aplicación.

[Tip] bzip2 vs pbzip2: Comprimir con bzip2 en forma paralela

Ya todos conocemos “bzip2“, un algoritmo de compresión sin perdida, pero no todos conocen la existencia del proyecto “pbzip2“, una implementación “paralela” del anterior; un algoritmo de compresión, basado en bzip2, que aprovecha los recursos de una máquina con SMP (Symmetric Multi-Processing).

PBZIP2 is a parallel implementation of the bzip2 block-sorting file compressor that uses pthreads and achieves near-linear speedup on SMP machines. The output of this version is fully compatible with bzip2 v1.0.2 or newer

(Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz)

En la imagen pueden ver los 3 procesos de pbzip2 consumiendo los 2 CPUs al 100%, de esta forma el tiempo de compresión es practicamente la mitad.
A simple vista, si bzip2 se demora 30 segundos, pbzip2 demora 15. Por ejemplo, con un archivo de texto (el típico dump sql) de tamaño 137Mb:
$ time bzip2 poc.sql

real 0m33.010s
user 0m32.788s
sys 0m0.147s

Y con pbzip2:
$ time pbzip2 poc.sql

real 0m19.827s
user 0m36.868s
sys 0m0.960s

Seguir leyendo

Joomla! Password Cracker

Saber como “hashea” las password el cms Joomla! no es algo muy complicado, no tiene ninguna ciencia y es muy facil de entender para intentar crackear algun password obtenido de alguna base de datos.
El hash en la base de datos tiene la forma de “HASH:SALT” y la forma en que genera el HASH es agregando el SALT al final de la password original, de esta forma: md5(password.SALT):SALT
Por ejemplo, si tenemos la password “foo” y el SALT “bar”, la forma de crear el hash sería:md5(foobar):bar
Lo que quedaría como 3858f62230ac3c915f300c664312c63f:bar

Por ejemplo, para probar con un hash mas real probaremos con  bd874661cb31eb7b612862725d0008f2:5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel que corresponde a la password “test” concatenada con el SALT 5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel:

md5(testbd874661cb31eb7b612862725d0008f2:5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel) = bd874661cb31eb7b612862725d0008f2

Entonces, la forma de crackear usando por ejemplo un diccionario seria tan facil como “parsear” el SALT, concatenarlo a la palabra del diccionario, calcular su md5 y compararla con el valor que está antes de los “:” del hash. Para esto, hice el siguiente script en Python:

#!/usr/bin/python2

from hashlib import md5
import sys
import string

original = sys.argv[1].split(':')
_md5 = original[0]
_salt = original[1]
print 'Trying to crack ' + _md5 + ' SALTED with ' + _salt + '... '
for line in sys.stdin:
	line = line.strip()
	attempt = md5(line + _salt).hexdigest()
	if(attempt == _md5):
		print _md5 + ':' + _salt + ' --- Password Found: ' + line
		print 'Hapy hacking!'
		sys.exit(0)
print 'Password not found : - ('
sys.exit(1)

Intenemos crackear el hash correspondiente a la password “test”:

$ ./john -i --stdout|python2 joomla-cracker.py bd874661cb31eb7b612862725d0008f2:5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel

Trying to crack bd874661cb31eb7b612862725d0008f2 SALTED with 5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel...
bd874661cb31eb7b612862725d0008f2:5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel
--- Password Found: test
Hapy hacking!
$

En este caso use “john the ripper” para generar un diccionario en el stdout pasandolo por stdin al script. Tambien se pueden usar diccionarios de la siguiente forma:

$ cat diccionario.txt|python2 joomla-cracker.py bd874661cb31eb7b612862725d0008f2:5LCuch6GA3Du5c3ywjxzlfPvXvvHZQel