Ataque Local de Contraseñas en un Sistema GNU/Linux utilizando Hashcat

Body

Realizar la identificación del algoritmo Hash utilizado es vital para romper por fuerza bruta una contraseña. Esto también se aplica a la utilización de Tablas Arco Iris. También es un requisito previo vital tener acceso privilegiado o “root” en el objetivo de evaluación. Este acceso puede haber sido obtenido, mediante un acceso físico al equipo de cómputo, o explotando alguna falla o vulnerabilidad a nivel del sistema operativo, servicios o aplicaciones ya sea de manera local o remota.

Para la siguiente demostración se utilizará un archivo de contraseñas capturada desde un objetivo de evaluación comprometido. Luego se utiliza la herramienta hashcat para tratar de obtener las contraseñas en texto plano.

Hashcat es la herramienta de recuperación basada en CPU más rápida del mundo. Aunque no es tan rápida como oclHashcat, grandes listados pueden ser fácilmente divididos a la mitad con un buen diccionario y poco conocimiento sobre las opciones del comando.

Se visualiza el archivo de nombre “shadow” capturado.

El primer objetivo será reconocer el tipo de Hash utilizado en el archivo “shadow”.

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::

Mediante un análisis de los campos; los cuales están divididos por el símbolo “$”; donde reside el hash cifrado para el usuario root, se obtiene lo siguiente:

$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.

El número “1” al inicio del campo identifica el método de hash de cifrado utilizado, en este caso se la contraseña se cifró utilizando MD5.

El valor “/avpfBJ1” corresponde al “Salt”. Esto introduce un desorden en el hash de la contraseña añadiendo cierto número de bits de pertubación, dependiendo del algoritmo de hash. Esencialmente, esto se incluye para incrementar la complejidad de la contraseña, proporcionando mayor protección contra los ataques por fuerza bruta. Adicionalmente, proporciona protección contra el reconocimiento de otras cuentas de usuario utilizando la misma contraseña. Específicamente cuando dos cuentas de usuario tengan la misma contraseña, sus hahs de las contraseñas serán diferentes debido al “Salt” utilizado.

El último campo correspondiente a la contraseña o hash. MD5 utiliza 22 caracteres.

Se procede a extraer únicamente los hash de las contraseñas contenidas en el archivo “shadow”. hacia un archivo.

# grep "\\$" shadow
# grep "\\$" shadow | cut -d ":" -f 2 > /tmp/passwords

Se ejecuta hashcat. La opción “-m” define el tipo de hash. Hashcat utiliza un número para definir el tipo de hash. El análisis realizado revela la utilización de un hash MD5, por lo tanto se utiliza el número “500” el cual corresponde a “md5crypt, MD5(Unix), FreeBSD MD5, Cisco-IOS MD5”. Se define también el archivo conteniendo las contraseñas cifradas, y una lista de palabras de nombre “rockyou.txt”

# hashcat -m 500 /tmp/passwords /usr/share/wordlists/rockyou.txt

Para este escenario el utilizar una lista de palabras ha permitido encontrar tres contraseñas. Luego mediante una comparación sencilla se puede conocer los nombres de usuarios a quienes pertenecen.

Hashcat incluye diversos modos de ataque, algunos de ellos adicionalmente con soporte para la inclusión de reglas. Permite también realizar ataques contra un gran número de algoritmos de cifrado, además de funcionar en diversos sistemas operativos.

Fuentes:

http://hashcat.net/hashcat/
https://administratosphere.wordpress.com/2011/05/27/etcshadow-format/
http://hashcat.net/wiki/doku.php?id=hashcat
https://wiki.skullsecurity.org/Passwords

Enumerar Permisos Indeseables en los Archivos de un Sistema GNU/Linux

Body

Establecer una buena política permite garantizar a los usuarios acceso específico hacia el sistema y sus contenidos, los cuales sean absolutamente necesarios. Luego se necesita identificar todos los archivos sobre el sistema, los cuales podrían posiblemente ser accedidos o modificados por usuarios legítimos o atacantes maliciosos, para perjuicio de la confidencialidad, integridad, o seguridad del sistema y su contenido. Entre los temas a considerar en primera instancia está la identificación de todos los archivos factibles de ser escritos por todos, los cuales podrían potencialmente poseer un riesgo para la confidencialidad, integridad, o seguridad del sistema y sus datos en caso sean modificados.

Para la siguiente demostración se utilizará la máquina virtual de nombre Metasploitable 2 y Kali Linux. En el escenario descrito a continuación ya se tiene acceso previo no privilegiado hacia el sistema comprometido.

Un atacante malicioso no privilegiado intentará listar los archivos o carpetas factibles de ser escritos por todos los usuarios, los cuales podría modificar o posiblemente utilizar para elevar privilegios sobre el sistema.

find / -perm -o=w > /tmp/ListaW
head -n 20 /tmp/ListaW

Adicionalmente un atacante malicioso intentará enumerar todos los archivos binarios sobre el sistema, los cuales pueden ser ejecutados por una cuenta de usuario restringida, y utilizarlos para posiblemente escalar permisos de la cuenta restringida de manera directa o indirecta.

find / -perm -o=x > /tmp/ListaX
head -n 20 /tmp/ListaX

En algunas distribuciones GNU/Linux los bits SetUID/SUID/SGID están ajustados para permitir a un archivo binario ejecutarse con los permisos del usuario “root” y funcionar de manera fiable en el sistema. Esto asegura a los archivos binarios no encontrar nunca inconvenientes con los permisos mientras cumplen una tarea específica, pues tienen acceso completo hacia los recursos del sistema. Lo cual proporciona también la capacidad de acceso para usuarios legítimos y atacantes maliciosos.

Buscar los archivos con el bit SetUID/SUID ajustado en el sistema.

find / -type f -perm 0400 -ls > /tmp/ListaSUID
head -n 20 /tmp/ListaSUID

Buscar los archivos con el bit SGID ajustados en el sistema.

find / -type f -perm 0400 -ls > /tmp/ListaSGID
head -n 20 /tmp/ListaSGID

Aunque esto podría no percibirse como una amenaza inmediata, la combinación de archivos y carpetas factibles de ser escritos por todos los usuarios con utilidades como tftp, netcat u otros, pueden conducir a los atacantes a utilizar el acceso limitado proporcionado por estos, para subir recursos hacia el sistema los cuales son necesarios para ganar acceso "root".

Fuentes:

http://www.tldp.org/HOWTO/Security-HOWTO/file-security.html
https://wiki.archlinux.org/index.php/File_permissions_and_attributes
https://www.kali.org/
http://sourceforge.net/projects/metasploitable/files/Metasploitable2/

Escaneo de Vulnerabilidades Local Autenticado utilizando OpenVAS

Body

OpenVAS (Open Vulnerability Assessment System) o Sistema Abierto para la Evaluación de Vulnerabilidades, es un framework excelente el cual puede ser utilizado para evaluar vulnerabilidades en los objetivos. Es una rama del proyecto Nessus, pero a diferencia de Nessus, OpenVAS ofrece actualizaciones completamente gratuitas. OpenVAS se incluye por defecto en Kali Linux, siendo su instalación y configuración relativamente sencilla.

Para la siguiente demostración se realizará un escaneo de vulnerabilidades local utilizando credenciales válidas contra el objetivo de evaluación de nombre Metasploitable 2.

Iniciado OpenVAS. Crear un nuevo listado de puertos utilizando la opción “Configuration -> Port Lists”

Crear una nueva configuración de escaneo utilizando la opción “Configuration -> Scan Configs”.

La creación de nuevas credenciales con la versión de OpenVAS incluída por defecto en Kali Linux al momento de redactar el presente texto, implica crear el directorio de nombre “/var/lib/openvas/gnupg/”.

Luego de aproximadamente diez minutos o más, las credenciales se han creado satisfactoriamente. El usuario y contraseña utilizados para esta demostración son “msfadmin/msfadmin”

Crear un nuevo objetivo de evaluación, definiendo en el campo de nombre “Port List” el nombre del listado de puertos creados previamente. En el campo de nombre “SSH Credential (Optional)” definir el nombre de las credenciales creadas en el procedimiento anterior.

La creación de un nuevo objetivo se realiza utilizando la opción “Configuration -> Targets”.

Se procede a crear una nueva tarea. En el campo de nombre “Scan Config” definir el nombre de la configuración de escaneo definida anteriormente. En el campo de nombre “Scan Targets” definir el nombre del objetivo de evaluación.

La creación de una nueva tarea se realiza utilizando la opción “Scan Management -> Tasks”.

Finalizado el escaneo de vulnerabilidades se presentarán los resultados del mismo.

El detalle de los resultados están ordenados por su severidad.

Los resultados obtenidos corresponden a las vulnerabilidades encontradas desde una perspectiva local, utilizando un conjunto de credenciales válidas. Lo cual puede ser totalmente diferente a un escaneo de vulnerabilidades remoto sin autenticación.

El siguiente paso es verificar manualmente cada vulnerabilidad reportada por OpenVAS y eliminar falsos positivos.

http://www.openvas.org/
http://www.reydes.com/d/?q=Escaneo_de_Vulnerabilidades_Externo_utilizan…
http://www.reydes.com/d/?q=Instalacion_de_OpenVAS_en_Kali_Linux
https://forums.kali.org/showthread.php?25750-OpenVAS-8-Internal-error-w…

Ganar Acceso Físico por Consola en un Sistema GNU/Linux

Body

Es factible implementar el mejor software y utilizar los mejores dispositivos de seguridad en una red o sistema, pero a menos se considere restringir el acceso físico todo esto será inútil. Probablemente la principal regla en seguridad de la información es siempre prevenir el acceso físico hacia una máquina. En la mayoría de casos, un acceso físico hacia una máquina permite al atacante la posibilidad de intentar comprometerla. Con la libertad de ejecutar cualquier herramienta basándose en el tiempo disponible, y consecuentemente tener acceso completo para eliminar, modificar, o copiar contenidos.

Para la siguiente demostración se utilizará la máquina virtual de nombre Metasploitable 2 y una imagen ISO de Kali Linux. Nuestro propósito principal será acceder a los archivos conteniendo las contraseñas cifradas.

Se inicia la máquina virtual de Metasploitable 2 desde el ISO de Kali Linux. Para ello se requiere previamente haber modificado el BIOS para iniciar desde el lector de CD o DVD, sea el caso.

Se selecciona la opción “Live (amd64)”

Aperturar una shell de comandos con privilegios de usuario “root”

Se listan las tablas de particiones para los dispositivos existentes en Metasploitable 2, utilizando el comando “fdisk”.

# fdisk -l

De los resultados obtenidos se identifica la partición “/dev/sda5” con un sistema de archivos Linux LVM, lo cual requiere realizar un montado especial.

Ejecutar el comando “pvs”, lo cual listará los grupos de volumenes al cual corresponde el volumen físico “/dev/sda5”. El segundo campo de nombre “VG” muestra el nombre del volumen. El siguiente paso es listar la información sobre el volumen utilizando el comando “lvdisplay”.

# pvs
# lvdisplay /dev/metasploitable

Entre toda la información expuesta el dato más relevante es “LV Name”. Ahora es factible montar la partición utilizando el comando “mount” con el método usual.

# mount /dev/metasploitable/root /tmp/raiz

Ingresar al directorio previamente creado de nombre “/tmp/raiz/” donde será factible ir a través del sistema de archivos de Metasploitable 2.

Los archivos de primordial atractivos serán el “/etc/passwd” y el “/etc/shadow”.

Visualización del archivo “/etc/passwd”

Visualización del archivo “/etc/shadow”

El atacante podría optar por anular la contraseña para el usuario “root”. Aunque dependiendo de la configuración del sistema podría no ser factible utilizar una contraseña nula. Una segunda opción sería generar manualmente el cifrado de una contraseña conocida y copiarlo en el campo correspondiente. Una tercera opción sería copiar los archivos antes mencionado hacia una unidad externa (USB) o hacia algún lugar en Internet, para luego proceder a lanzar una ataque para intentar romper las contraseñas.

Fuentes:

https://www.kali.org/
http://sourceforge.net/projects/metasploitable/files/Metasploitable2/
http://linuxers.org/howto/how-mount-linux-lvm-volume-partitions-linux

Extraer Información del Historial de Navegación desde Firefox 2 utilizando Mork

Body

Mork.pl es una herramienta escrita en perl, la cual permite leer el archivo de historial de URLs de Mozilla “history.dat”, permitiendo imprimir una lista de URLs y sus tiempos de último acceso.

El archivo de nombre “history.dat” almacena el historial de navegación (un registro de las páginas visitadas) en Firefox 2 y anteriores. Iniciando con Firefox 3 el archivo “history.dat” ya no es utilizado.

El historial de navegación no debe ser confundido con el historial de sesión el cual controla los botones Atrás y Adelante, o con el historial de descargas el cual almacena los detalles de los archivos salvados hacia el disco duro, o abiertos con un programa externo.

Para la siguiente demostración se utiliza el script de nombre “mork.pl” ubicado en el directorio de nombre “/usr/share/cain/pacchetti/scripts/” en CAINE.

Al ejecutar la herramienta se presentan sus opciones.

Su manera de utilización más simple se define el nombre del archivo “history.dat” a analizar. El reporte será presentado por pantalla. Este incluirá un número representando el “ctime” (número de segundos desde el 1 de Enero del año 1970 GTM), y el segundo número representa el número de visitas realizadas hacia la URL. Las URLs se imprimen primero por las más recientes.

$ perl mork.pl /tmp/history.dat

La opción “-vv” imprime toda la información conocida sobre cada URL, incluyendo el tiempo de la primera visita, última visita, título del documento, entre otra información. La opcion “--html” permite crear un archivo en formato HTML conteniendo los resultados.

$ perl mork.pl -vv --html/tmp/history.dat > /tmp/history.html

La herramienta también incluye la opción “--age” la cual permite limitar las URLs a ser cargadas dentro de un lapso de tiempo. Por ejemplo el valor “2H” define un lapso de tiempo de 2 horas. Este valor de tiempo puede ser definido en segundos, minutos, días, horas, etc.

Fuentes:

http://www.caine-live.net/page11/page11.html
http://kb.mozillazine.org/History.dat

Extraer todos los Metadatos de Archivos LNK desde una Imagen Forense utilizando lnk

Body

lnk.sh es un script escrito en bash, el cual permite buscar todos los archivos recientes de extensión LNK dentro de una imagen forense, para un nombre de usuario específico. Los archivos conteniendo los resultados obtenidos se copiarán hacia un directorio de salida.

Los archivos LNK son artefactos relativamente simples pero valiosos para un investigador forense. Son archivos de atajo o “acceso directo” los cuales enlazan hacia una aplicación o archivo comúnmente encontrados en el escritorio del usuario o través del sistema, y finalizan con la extensión .LNK. Estos archivo pueden ser creados por el usuario o automáticamente por el sistema operativo Windows. Tienen su propio valor y significado. Los archivos LNK creados son generados cuando un usuario abre un archivo local o remoto, proporcionando a los investigadores información valiosa sobre una actividad sospechosa.

Para la siguiente demostración se utiliza el script incluido en CAINE de nombre “lnk.sh”, ubicado en el directorio de nombre “/usr/share/caine/pacchetti/scripts/”

Al ejecutar el script sin parámetros se muestra la ayuda.

Como se indica en uno de los parámetros del script, se requiere conocer el desplazamiento u offset tal como se obtiene al utilizar el comando “mmls”. Razón por la cual se procede a utilizar este comando contra la imagen forense en análisis.

$ mmls DiscoWindows7.001

Otro dato requerido para ejecutar el script es un archivo conteniendo el listado de los archivos LNK presentes en la partición a analizar, lo cual se genera con el siguiente comando.

$ sudo fls -prF -f ntfs -o 206848 /tmp/imagenes/Windows7/DiscoWindows7.001 | grep lnk$ > /tmp/lnk_list.txt

Al ejecutar el script se presenta un mensaje de error, el cual versa sobre la imposibilidad de ubicar el comando “lnk-parse”.

$ sudo bash lnk.sh /tmp/imagenes/Windows7/DiscoWindows7.001 ntfs 206848 /tmp/lnk_list.txt “Eugenio Dervez”.

Una solución es crear un enlace simbólico con el nombre pertinente y modificar el script para utilizar el nuevo nombre definido. Luego se procede nuevamente a ejecutar el script.

La ejecución del script ha culminado. El mensaje expuesto indica el directorio de salida conteniendo la información de los archivos recientes.

El directorio de salida por defecto tiene el nombre “/recent_files/” ubicado en el directorio actual. En este directorio se encuentra el archivo de nombre “recent_allocated.txt” conteniendo la información de los archivos LNK encontrados. En el directorio de nombre “/file/” se encuentran los archivos LNK originales extraídos desde la imagen forense, y en el directorio de nombre “/meta/” se encuentran archivos conteniendo los metadatos para cada uno de los archivos LNK extraídos desde la imagen forense.

Como ejemplo se muestran los metadatos obtenidos desde uno de los archivos LNK. Anotar la extracción tanto de los metadatos del archivo LNK, como también de los metadatos a nivel del sistema de archivos.

Anotación: Los comandos de nombres “mmls” y “fls” son parte de The Sleuth Kit.

Fuentes:

http://www.caine-live.net/page11/page11.html
http://www.reydes.com/d/?q=Forense_al_Archivo_de_Acceso_Directo_en_Wind…
http://forensicswiki.org/wiki/LNK
http://www.magnetforensics.com/forensic-analysis-of-lnk-files/
http://www.sleuthkit.org/sleuthkit/

Analizar Archivos LNK utilizando lnk-parse

Body

El archivo de atajo o “acceso directo” de Windows tiene la extensión .LNK. Este es básicamente un archivo de metadatos, específico para la plataforma Microsoft Windows y es interpretado por el shell de Windows. El formato del archivo indica el contenido de una firma 0x4C (4C 00 00 00) en el desplazamiento 0 dentro del flujo/archivo. Además, el GUID (CLSID) 00021401-0000-0000-c000-000000000046 almacenado en el byte 4 de desplazamiento lo hace un buen identificador.

Comprender este formato de archivo puede ser extremadamente útil para un analista, pues no solo los archivos de atajo o acceso directo siguen siendo empleados en Windows 7, sino el formato binario es también utilizado en flujos numerados dentro de archivos de listas de saltos*.automaticDestinations-ms sobre Windows 7 y Windows 8.

Para la siguiente demostración se utilizar el script de nombre “Lnk-parse-1.0.pl” ubicado en el directorio “/usr/share/caine/pacchetti/scripts/” en CAINE. Lnk-parse es un script hecho en perl para interpretar archivos *.lnk.

Al ejecutar el script se expone su modo de uso. La cual es muy sencilla.

Se procede a definir el archivo en formato LNK a ser analizado.

Entre la información obtenida se enumeran las banderas del archivo, la fecha de creación, la fecha de última acceso y la fecha de última modificación. La longitud del objetivo. Para el archivo en análisis no se obtiene información sobre la descripción, ruta relativa o nombre del archivo ícono.

Fuentes:

http://www.caine-live.net/page11/page11.html
http://www.reydes.com/d/?q=Forense_al_Archivo_de_Acceso_Directo_en_Wind…
http://forensicswiki.org/wiki/LNK
https://code.google.com/p/lnk-parser/

Examinar Información desde Unidades de Almacenamiento utilizando HDSentinel

Body

HDSentinel es un software para la vigilancia y análisis de SSD (Unidades de Estado Sólido) y HDD (Unidades de Disco Duro). Su objetivo es encontrar, evaluar, diagnosticar y reparar problemas en unidades de disco duros, reportar y mostrar la salud de SSDs y HDDs, degradaciones en el desempeño y fallas.

Utilizando la edición consola de Linux Sentinel para Discos Duros, es posible examinar la información sobre la temperatura y salud (y más) de discos duros IDE, S-ATA (también SATA II), SCSI y USB conectados hacia la tarjeta madre o tarjetas controladoras externas. El usuario debe ser root para utilizar este software o iniciarlo con sudo.

Para simplificar el inicio de la herramienta, es posible utilizar uno de los instaladores de escritorio para linux, lo cual permite iniciarla directamente desde el escritorio, sin necesidad de hacerlo manualmente desde una consola.

Para la siguiente demostración se utiliza la versión incluida en CAINE. La herramienta se ubica en el directorio de nombre “/usr/share/caine/pacchetti/scripts/”.

Ejecutar la herramienta utilizando el comando “sudo”.

Entre la información mostrada se enumera.

  • Detección de número de disco duro y nombre del dispositivo (Ejemplo /dev/sda)
  • Tamaño, ID de modelo, número de serie, revisión e interfaz de todos los discos duros detectados.
  • Valores de temperatura, salud y desempeño.
  • Tiempo de encendido (días, horas, minutos - si es soportado). Esto es sólo para propósitos de información, el valor mostrado bajo Windows (después de algunos minutos de prueba) podría ser más preciso.
  • Ajustes de gestión acústica (si lo soporta y se utiliza la opción -aam o -setaam)

AAM (Automatic Acoustic Management) o por su traducción al español Gestión Automática Acústica, es un método para reducir las emanaciones acústicas en dispositivos de almacenamiento (ATA), como discos duros ATA o unidades ópticas ATAPI. Cuando un dispositivo soporta AAM, los parámetros de gestión acústica son ajustables a través de un software o interfaz de usuario firmware.

HDSentinel proporciona otras opciones en línea de comando, las cuales permiten crear reportes en formato de texto plano o XML, mostrar información más detallada, y realizar ajustes en el nivel de acústica.

Fuentes:

http://www.hdsentinel.com/hard_disk_sentinel_linux.php
http://www.hdsentinel.com/
http://www.caine-live.net/page11/page11.html
http://en.wikipedia.org/wiki/Automatic_acoustic_management

Recuperar Archivos Borrados utilizando Fundl

Body

Fundl es un script el cual hace posible recuperar todos los archivos borrados o buscar por extensiones de archivo. Permite también generar un reporte en HTML. Y utiliza The Sleuth Kit para recuperar los archivos borrados.

The Sleutk Kit es una librería y colección de herramientas en linea de comando para investigar imágenes de disco. La funcionalidad principal de TSK permite analizar datos de volumen y sistema de archivos.

Para la siguiente demostración se utiliza CAINE y una imagen forense. El script se ubica en el directorio “/usr/share/caine/pacchetti/scripts/”.

Al ejecutar el script de nombre “fundl.sh”, se solicita insertar la ubicación de la imagen forense o el dispositivo. Para el presente escenario se utiliza una imagen forense en formato raw o en bruto. Luego se solicita definir el directorio de salida para los resultados. Dado el hecho de existir el directorio se muestra un mensaje de error. También se solicita insertar la extensión de los archivos a recuperar, en caso se requiera realizar la recuperación de todos los archivos se utiliza en símbolo “*”.

La herramienta muestra la disposición de las particiones contenidas en la imagen forense, para luego solicitar definir el sector inicial de la partición sobre la cual se realizará el proceso.

Se solicita insertar el tipo de sistema de archivos. Para este caso es NTFS.

Finalizado el proceso de recuperación se muestra un listado de los archivos producidos durante la ejecución de la herramienta.

El archivo de nombre “filelist.txt” contiene un listado de los archivos recuperados. El archivo de nombre “filenames.htm” contiene el mismo listado de archivos recuperados pero en formato htm, lo cual permite realizar una navegación y visualizar por ejemplo directamente archivos de tipo txt, o jpeg.

Fuentes:

http://www.caine-live.net/page11/page11.html
http://sfdumper.sourceforge.net/fundl.htm
http://www.sleuthkit.org/sleuthkit/

Dividir los Resultados de Foremost utilizando Fod

Body

FOD son las siglas de “Foremost Output Devide” o por su traducción al idioma español sería Dividir la Salida de Foremost. Este es un script para separar contenidos de los directorios de salida de Foremost en subdirectorios con un número definido de archivos para cada tipo de formato de archivo.

Foremost es un programa en consola para recuperar archivos basándose en su cabezas, pies, y estructuras de datos internas. Este proceso es comúnmente referenciado como un tallado (carving) de datos. Puede trabajar con archivos de imagen generados con dd, Safeback, Encase, etc, o directamente sobre una unidad de almacenamiento. Las cabeceras y pies se especifican por un archivo de configuración, o se puede utilizar la linea de comando para especificar los tipos de archivos. Estos tipos incluidos se buscan en las estructuras de datos del formato de archivo dado, permitiendo una recuperación más confiable y rápida.

Para la siguiente demostración se utilizará CAINE. El script se ubica en el directorio “/usr/share/caine/pacchetti/scripts/”

Ejecutar el script fod.sh. Su ejecución por defecto expone la ayuda de la herramienta.

Para la presente demostración se tienen los archivos recuperados utilizando Foremost, en el directorio de nombre "/tmp/archivos/".

Ahora se procede a definir las opciones adecuadas para utilizar el script fod.sh. El número 10 define el número máximo de archivos a colocar en cada subdirectorio del tipo de archivo. La opción “-m” mueve el directorio del tipo de archivo original, y su contenido es removido después de mover los archivos en el subidorectorio. La opción “-N” define la no aplicación de filtros, de esta manera se copiarán o moverán todos los archivos. El número 0 define el limite del tamaño en bytes, solo los archivos menores o mayores a este límite serán movidos o copiados, dependiendo de los parámetros previos.

$ bash fod.sh /tmp/archivos/ 10 -m -N 0

Notar el cambio de nombre de los directorios, ahora se añade el número 1 al final de la mayoría de directorios, pero se han creado nuevos directorio de nombre "jpg22 y "jpg3", cada uno de ellos conteniendo 10 archivos de formato JPG.

También es factible definir más filtros como el tamaño de los archivos.

Fuentes:

http://www.caine-live.net/page11/page11.html
http://foremost.sourceforge.net/