viernes, 25 de mayo de 2018

Generando un Script de consulta de IP PowerShell para resolver las IP conectadas

Bueno primero tenemos que habilitar la ejecución de script de Powershell:
Verificamos como esta la política:
PS D:\> Get-ExecutionPolicy
Restricted (Resultado, significa que tenemos bloqueada esta política)

Cambios el acceso para que sea sin restricciones:
PS D:\> Set-ExecutionPolicy Unrestricted

Esta política cambia para todos los usuarios, puede ser que te de problemas, entonces debemos aplicarlo solo al usuario actual:

PS D:\> Set-ExecutionPolicy -Scope CurrentUser Unrestricted

Ahora para crear un Script tenemos que conocer algunos comandos importantes:
Foreach, recorre una array, informacion sobre loops
if(p1 -ne p2), condicional que evalua que p1 sea diferente a p2
Para conocer mas operadores de comparacion utilizar el siguiente enlace
if(p1 -And p2), condicional que evalua p1 and p2, también se puede usar -Or
try{}catch{}, ejecuta un proceso y se ocurre un error lo envía a catch
Para conocer como manipular variables y array siguiente enlace

Vamos a utilizar la función Get-NetTCPConnection, mas información
PS D:\> Get-NetTCPConnection
Esta función devolverá todas las conexiones TCP que tiene su equipo, la información mostrada es básica, existe mas información que nos puede mostrar, el siguiente comando da mas detalle:
Get-NetTCPConnection | Format-List -Property *

Para mostrar la informacion en columnas se tiene que exportar al excel, el siguiente comando permite eso:
Get-NetTCPConnection | Export-Csv -Path "data.csv"

Para poder filtrar solo tenemos que seleccionar una columna e indicar el valor del filtro:
PS D:\> Get-NetTCPConnection -RemotePort 443

Para personalizar la cantidad de columnas que va a tener se puede hacer con el parámetro select
PS D:\> Get-NetTCPConnection -RemotePort 443 | select RemoteAddress, RemotePort, State

Para hacer filtros puede hacer de la siguiente forma, trabajando con el nombre de los encabezados

PS D:\> Get-NetTCPConnection -RemotePort 443 |?  {($_.RemoteAddress -ne "0.0.0.0") -and ($_.RemoteAddress -ne "::")}  | select RemoteAddress, RemotePort, State



param (
  [string]$ip = $(throw "ip is required.")
 )

$ipParts = $ip.Split('.')
[array]::Reverse($ipParts)
$ipParts = [string]::Join('.', $ipParts)

Function Get-DnsEntry($iphost){
$subnetIP = Get-NetTCPConnection | Select RemoteAddress
foreach ($IPRemote in $subnetIP){
$iphost = $IPRemote.RemoteAddress
if(($iphost -ne "127.0.0.1") -And ($iphost -ne "0.0.0.0") -And ($iphost -ne "::") ){
try { [System.Net.Dns]::GetHostEntry($iphost)
}catch{
Write-Host $iphost }
}
}
}



$conecciones= Get-NetTCPConnection | ? {($_.RemoteAddress -ne "0.0.0.0") -And ($_.RemoteAddress -ne "::")} | Select-Object RemoteAddress, LocalPort, RemotePort, OwningProcess -Unique | Sort-Object -Property OwningProcess
foreach($coneccion in $conecciones) {Get-Process -PID $coneccion.OwningProcess | select ProcessName, Id, @{Name ="RemoteAddr";Expression={$coneccion.RemoteAddress}}, @{Name ="LocalPort";Expression={$coneccion.LocalPort}}}


Referencias Bibliográficas:
https://jongrassley.wordpress.com/2016/09/22/get-nettcpconnection/
https://stackoverflow.com/questions/39630404/inner-join-in-powershell-without-sql




jueves, 26 de abril de 2018

Abriendo archivos desde una imagen

Primero abrimos una imagen y visualizamos su contenido:
fls -f ext2 -m "/" -r imagen.dd
0|/lost+found|11|d/drwx------|0|0|12288|1254232453|1254232453|1254232453|0
0|/pos39.jpg|12|r/rrw-r--r--|0|0|37947|1254232606|1254232501|1254232501|0
0|/bbdd1|13|r/rrw-------|0|0|3145728|1254235683|1254232936|1254235733|0
0|/arch2 (deleted)|0|r/----------|0|0|0|0|0|0|0
0|/$OrphanFiles|28113|V/V---------|0|0|0|0|0|0|0
0|/$OrphanFiles/OrphanFile-14 (deleted)|14|-/rrw-r--r--|0|0|57|1254233933|1254233909|1254233942|0

Podemos visualizar que tenemos una imagen en inodo 12, para ver su contenido utilizamos el siguiente comando:
#istat -f ext2  imagen.dd 12 
inode: 12
Allocated
Group: 0
Generation Id: 2783857707
uid / gid: 0 / 0
mode: rrw-r--r--
size: 37947
num of links: 1

Inode Times:
Accessed:    2009-09-29 08:56:46 (PET)
File Modified: 2009-09-29 08:55:01 (PET)
Inode Modified: 2009-09-29 08:55:01 (PET)

Direct Blocks:
1025 1026 1027 1028 1029 1030 1031 1032
1033 1034 1035 1036 1038 1039 1040 1041
1042 1043 1044 1045 1046 1047 1048 1049
1050 1051 1052 1053 1054 1055 1056 1057
1058 1059 1060 1061 1062 1063

Indirect Blocks:
1037

El inodo 12 nos indica que tiene bloques directos e indirectos. Ahora como sabes que es una imagen por que podemos consultar la cabecera del primer bloque.
para ello utilizamos el comando:

#blkcat -f ext2 imagen.dd 1025 |  hexdump -C
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 00 00 01  |......JFIF......|
00000010  00 01 00 00 ff db 00 43  00 05 03 04 10 10 0f 10  |.......C........|

Los primeros cuatro números hexadecimal nos indica que tipo de archivo es:
ff d8 ff e0  pertenece a una imagen, esto se puede consultar en la siguiente tabla.
https://www.welivesecurity.com/la-es/2015/10/01/extension-de-un-archivo-cabeceras/


Ahora que sabemos que es una imagen podemos extraer todos los bloques al llamar directamente al inodo.
 icat -f ext2  imagen.dd 12 > imagen.jpg


Para poder extraer el nombre del archivo podemos utilizar el siguiente comando:
# ffind -f ext2 imagen.dd 12
/pos39.jpg






martes, 24 de abril de 2018

Comando utiles

File

File determina el tipo de un archivo y te imprime en pantalla el resultado. No hace falta que el archivo tenga una extensión para que File determine su tipo, pues la aplicación ejecuta una serie de pruebas sobre el mismo para tratar de clasificarlo.
Ejecutarlo sería tan sencillo como:
$ file un_archivo_de_texto.txt

Ln

Ln es una aplicación que permite crear enlaces a los archivos, tanto físicos (hard links) como simbólicos (soft links). En pocas palabras, un enlace simbólico es como un acceso directo en Windows o un alias en OSX mientras que un enlace físico es un nombre diferente para la misma información en disco.
Para crear un enlace físico ejecutamos:
$ ln archivo_origen nombre_enlace

Y para crear un enlace simbólico:
$ ln -s archivo_origen nombre_enlace

Instalar Herramientas Forence

Instalar Autopsy
  1. Download the latest epel-release rpm from
    http://dl.fedoraproject.org/pub/epel/7/x86_64/
  2. Install epel-release rpm:
    # rpm -Uvh epel-release*rpm
  3. Install sleuthkit rpm package:
    # yum install sleuthkit


Cargar carpetas compartidas VMWare

Para poder ver que carpetas reconoce linux, podemos utilizar el comando:

[root@localhost caso2-1]# vmware-hgfsclient
Scripts
CIFH
Casos


Luego para reconocer la carpeta utilizamos el comando:
[root@localhost caso2-1]# mount -t vmhgfs .host:/Casos /mnt/real
mount: unknown filesystem type 'vmhgfs'

En el caso de que no reconoce el filesystem podemos utilizar el siguiente comando:
/usr/bin/vmhgfs-fuse .host:/ /mnt/real -o subtype=vmhgfs-fuse,allow_other



miércoles, 14 de marzo de 2018

Comandos útiles en CMD de Windows

Comando para enviar la salida en un archivo nuevo:
d:\>dir /a > salida.txt

Para adicionar la salida de un comando a un archivo ya existente:
d:\>dir >> salida.txt

Comando para mostrar el contenido de un archivo txt sin iniciar el notepad:
d:\>type salida.txt

Comando para enviar la salida comando al portapapeles:
d:\>dir /a | CLIP

Comando para listar todos los archivos ocultos y de sistema
d:\>dir /a:h /s

Comando para buscar en todos los archivos un texto
find <TextoABuscar> archivo
ejm: find "Unit" *.txt

Para que indica el numero de lineas donde coincide la cadena de busqueda
find /C "Unit" *.txt


miércoles, 24 de enero de 2018

Malware Forence

Malware Forensics

El malware forensics se puede hacer de 4 formas:
- Análisis estático básico
- Análisis dinámico básico
- Análisis estático Avanzado
- Análisis dinámico Avanzado

Cuando en el analisis estatico basico no podemos obtener muchas informacion por que el archivo puede estar packed o ofuscado, el análisis dinámico nos permitiría mostrar mas, por que al ejecutar el virus vamos a poder observar que acciones va a realizar.
A través de la herramienta Process Monitor, permite grabar todas las tareas que realizan los procesos de tal forma que luego se puede revisar que acciones realizo el malware, como por ejemplo si muto, si creo un registro en el RegEdit, entre otras.
Uno de los filtros que puedo aplicar para conocer si escribio en el archivo de registro, es filtrar la operación a con la palabra clave RegSetValue y para saber si muto, se puede conocer si ejecuto la operación WriteFile


Lo que muestra en la siguiente figura son las acciones realizadas por el malware, en las segunda acción se puede ver que se copio el archivo como vmx32to64.exe en la carpeta mencionada.
En la tercera acciones se puede ver que genero un registro para que se ejecute el virus automáticamente al momento de reiniciar.


En la figura anterior se muestra que el malware escribe constantemente en Microsoft\Cryptography\RNG\Seed, este registro es una información generada como semilla para un número aleatorio criptográfico. Hay dos formas de generar semillas para números aleatorios en criptografía a traves de hardware y software, este registro no están importante, puede distraer nuestra atención, por eso es mejor filtrarlo.

Un malware no solo se presenta en un exe, tambien puede venir en una dll, para ejecutar la DLL utilizamos el siguiente comando:
C:\>rundll32.exe Lab03-02.dll,installA

Ahora extraemos información de la DLL, un registro importante es por ejemplo cuando el malware escribe dentro del registro HKLM\SYSTEM\CurrentControlSet\Services, esto nos da un indicio de que el malware se esta colocando como servicio.
La imagen anterior muestra los procesos ejecutados por una dll, dado que el malware es una DLL, depende de un ejecutable para ejecutarlo. De hecho, en la linea 2 se puede observar que ImagPath esta con el parametro svchost.exe -k netsvcs, lo cual significa que el malware sera lanzado sobre el procesos svchost, el proceso sobre el que es lanzado svchost es básicamente es el encargado en Windows de ejecutar los servicios que corren desde una DLL (dynamic-link libraries). Existen tantas entradas svchost como procesos que lo utilizan.  El resto de la información, como DisplayName y Descripción, la line 3 y 4, crea una huella digital única que se puede utilizar para identificar el servicio malicioso.
En la imagen anterior se puede extraer información como el nombre del servicio y el DisplayName, ahora vamos a ejecutar el virus.
If we examine the strings closely, we see SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHostand a message "You specify service name not in Svchost//netsvcs, must be one of following". If we follow our hunch and examine the \SvcHost\netsvcs registry key, we can see other potential service names we might use, like 6to4 AppMgmt. Running Lab03-02.dll,installA 6to4 will install this malware under the 6to4 service instead of the IPRIP service, as in the previous listing.
After installing the malware as a service, we could launch it, but first we’ll set up the rest of our basic dynamic tools. We run procmon (after clearing out all events); start Process Explorer; and set up a virtual network, including ApateDNS and Netcat listening on port 80 (since we see HTTP in the strings listing).
Since this malware is installed as the IPRIP service, we can start it using the net command in Windows, as follows:
c:\>net start IPRIP
The Intranet Network Awareness (INA+) service is starting.
The Intranet Network Awareness (INA+) service was started successfully.
The fact that the display name (INA+) matches the information found in the registry tells us that our malicious service has started.
Next, we open Process Explorer and attempt to find the process in which the malware is running by selecting Find ▸ Find Handle or DLL to open the dialog shown in Figure C-6. We enter Lab03-02.dll and click Search. As shown in the figure, the result tells us that Lab03-02.dll is loaded by svchost.exe with the PID 1024. (The specific PID may differ on your system.)

Figure C-6. Searching for a DLL in Process Explorer
In Process Explorer, we select View ▸ Lower Pane View ▸ DLLs and choose the svchost.exe running with PID 1024. Figure C-7 shows the result. The display name Intranet Network Awareness (INA+) shown at ❶confirms that the malware is running in svchost.exe, which is further confirmed when we see at ❷ that Lab03-02.dll is loaded.

Figure C-7. Examining service malware in Process Explorer
Next, we turn our attention to our network analysis tools. First, we check ApateDNS to see if the malware performed any DNS requests. The output shows a request for practicalmalwareanalysis.com, which matches the strings listing shown earlier.
NOTE
It takes 60 seconds after starting the service to see any network traffic (the program does a Sleep(60000)before attempting network access). If the networking connection fails for any reason (for example, you forgot to set up ApateDNS), it waits 10 minutes before attempting to connect again.
We complete our network analysis by examining the Netcat results, as follows:
c:\>nc -l -p 80
GET /serve.html HTTP/1.1
Accept: */*
User-Agent: MalwareAnalysis2 Windows XP 6.11
Host: practicalmalwareanalysis.com
We see that the malware performs an HTTP GET request over port 80 (we were listening over port 80 with Netcat since we saw HTTP in the string listing). We run this test several times, and the data appears to be consistent across runs.
We can create a couple of network signatures from this data. Because the malware consistently does a GETrequest for serve.html, we can use that GET request as a network signature. The malware also uses the User-Agent MalwareAnalysis2 Windows XP 6.11. MalwareAnalysis2 is our malware analysis virtual machine’s name (so this portion of the User-Agent will be different on your machine). The second part of the User-Agent (Windows XP 6.11) is consistent and can be used as a network signature.



A través de la herramienta ProcessExplorer vamos a poder encontrar que el malware muto con el nombre WinVMX32.

Para conocer que acciones realizo en la red, podemos utilizar la herramienta apateDNS

Una guia completa para instalar inetsim es la siguiente:
https://techanarchy.net/2013/08/installing-and-configuring-inetsim/





miércoles, 17 de enero de 2018

Como revisar los procesos de Windows

La herramientas tasklist, nos permite listar todos los procesos con información como que programa esta corriendo, cuando de memoria esta consumiendo, el estado del proceso que usuario esta haciendo uso del proceso el tiempo que esta activo, entre otras muchas cosas.

Para listar todos los procesos que no responden, se adiciona el parámetro /v para que muestre toda la información y /FI para filtrar el contenido, se puede utilizar el siguiente comando:
tasklist /v /FI "STATUS eq Not Responding"

Si quiere eliminarlo, se adiciona el /F para forzar el cierre y /FI para hacer el filtro,  se puede utilizar el siguiente comando:
taskkill /F /FI "STATUS eq Not Responding"

Para buscar todos los procesos, se puede filtrar utilizando el parámetro /FI seguido del parámetro de filtro, el parámetro de filtro puede ser el de las cabeceras de la tabla mostrada, se puede utilizar comodines como * para mejorar la busqueda, la lista completa de parámetros esta en la siguiente pagina:
https://technet.microsoft.com/es-es/library/bb491010.aspx


tasklist /v /FI "IMAGENAME eq chrome*"


Para ordenar los resultados podemos adicionar el comando SORT
tasklist /v /FI "IMAGENAME eq chrome*"  | sort /r /+56