martes, 4 de septiembre de 2018

Escaner de listas IPs con VirusTotal (plus conocer Localizacion)

Escaner de listas IPs con VirusTotal .. ( scan several ips )
- Con ayuda de PowerShell
- Sin necesidad de que obtengas tu "API key" ( https://www.virustotal.com/es/faq/#virustotal-api )
. . .
. . . . . Siempre terminas con una larga lista de IPs que transitan por el PC y deseas analizar en VirusTotal; pero analizar de uno a la vez en ella tomaria mucho tiempo.
. . .
Como ejemplo de Nirsoft ..:: LiveTcpUdpWatch.exe
con mucha informcion y una interfaz amigable en tiempo real.

 Brinda un excelente reporte facil de ser manejado.
. . .
Atravez de PowerShell . . . XD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Analisis de IPs PowerShell; en la misma carpeta -- LiveTcpUdpWatch.exe
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# En "IPs-analizados.txt"  (su lista de IPs frecuentes; del sistema y personales; una ip por linea)
# - dejar solo IPs. borrar lineas que inicien con "#" y lineas vacias
Get-Content "IPs-analizados.txt" | Where-Object {$_ -notmatch '#'} | ? {$_.trim() -ne "" } | set-content "IPs-solos.tmp"
# - - -
# - cambiar el nombre a "Conexiones-00.txt" (su reporte de LiveTcpUdpWatch.exe )
# - eliminar procesos conocidos: "Process Name      : Agr-privoxy.exe" y "Process Name      : chrome.exe"
Get-Content "Conexiones-00.txt" | Where-Object {$_ -notmatch '^Process Name      : Agr-privoxy.exe'} | Where-Object {$_ -notmatch '^Process Name      : chrome.exe'} | set-content "conex0.tmp"
# - obtener los procesos que no han sido analizados
Get-Content "conex0.tmp" | Select-String 'Process Name      :' -Context 2,19 | set-Content "Conex1.tmp"
# - - -
# - eliminar IPs revisadas de "Conexiones-00.txt" (Remote Address) y dejar las IPs No revisadas
Get-Content "Conex1.tmp" | Select-String -notmatch (Get-Content "IPs-solos.tmp") | set-Content "Conex2.tmp"
# - obtener IPs que no han sido analizados; si no se genera "Conex-Para-revison.txt"  no hubo nuevas IPs.
Get-Content "Conex2.tmp" | Select-String "Remote Address" -Context 8,13 | set-Content "Conex-Para-revison.tmp"
# - - -
# - Obtener solo IPs por analizar; quitar ruta, sellecionar urls, eliminar lineas duplicadas y ordena ascendente (defautl)
Get-ChildItem "Conex-Para-revison.tmp" | Select-String -Pattern 'Remote Address    : ' | Foreach-Object {$_ -Replace('^.+Remote Address    : ','')} |  Sort-Object -Unique | Set-Content "Conex-Para-Rev-IPs.tmp"
# - - -
# Escaner VirusTotal para listas de IPs .... Mientras mas IPs mas demora. . . . . .
get-content "Conex-Para-Rev-IPs.tmp" | Where-Object {$_ -notmatch ':'}  | Foreach-Object {$_ -Replace(' \[.+\]$','')} | ? {$_.trim() -ne "" } | set-content "IPs-procesos0.tmp"
$URLList = Get-Content "IPs-procesos0.tmp" | foreach {"https://www.virustotal.com/es/url/submission/?force=1&url=" + $_ }
Foreach($Uri in $URLList)
{
$web = Invoke-WebRequest -Uri $Uri
$dr = $web.tostring() -split "[`r`n]" | select-string "detection-ratio..\d+"
( @($URLList) | foreach { $_ + $dr } | Foreach-Object {$_ -Replace('^.+url=','')} | Foreach-Object {$_ -Replace('<strong.*id=','')} | Foreach-Object {$_ -Replace('.span...strong>$','')} | set-content "detection.tmp")
}
# -- Si no hay IPs detectadas en VirusTotal nada mostrara . . .
get-content "detection.tmp" | select-string ".detection-ratio..[1-9]"

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
En la imagen como lucen los resultados.
- Si VirusTotal no obtuvo positivos "no mostrara nada como resultado"
- Si VirusTotal obtuvo positivos se vera como en la imagen inferior


 ---  ---  ---  ---  ---  ---  ---  ---  ---  ---
 ---  ---  ---  ---  ---  ---  ---  ---  ---  ---
Tal vez el siguiente dato importante es conocer la localizacion de esas IPs sospechozas y si estan vinculadas a alguna compañia conocida. ( Positivos en VirusTotal y de Pais de mala reputacion . . . es lo peor que puede suceder . . . XD )

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# OPCIONAL. averiguar la localizacion de las IPs "https://myip.es/"
# obtener informacion de una lista IPs . . . . .
get-content "detection-positivos.tmp"  | Foreach-Object {$_ -Replace('.detection-ratio.+$','')} | ? {$_.trim() -ne "" } | set-content "IPs-Location0.tmp"
$URLList = Get-Content "IPs-Location0.tmp" | foreach {"https://myip.es/" + $_ }
Foreach($Uri in $URLList)
{
$web = Invoke-WebRequest -Uri $Uri
$dr = $web.tostring() -split "[`r`n]" | select-string "^\<..\>\<..\>Direcci..n IP:" , "^\<..\>\<..\>Registro PTR:" , "^\<..\>\<..\>Organizaci..n:" , "^\<..\>\<..\>ISP:" , "^\<..\>\<..\>Ciudad:" , "^\<..\>\<..\>Pa..s:" , "^\<..\>\<..\>Estado:" | Foreach-Object {$_ -Replace('^\<..\>\<..\>','')} | Foreach-Object {$_ -Replace('<...><...>$','')} | Foreach-Object {$_ -Replace('<...><..>','  ')} | Foreach-Object {$_ -Replace('Direcci..n IP:','- - - Direccion IP:')} | Foreach-Object {$_ -Replace('Organizaci..n:','Organizacion:')} | Foreach-Object {$_ -Replace('Pa..s:','Pais:')}
Add-Content -value  $dr -path "IPs-Location1.tmp"
}
get-content "IPs-Location1.tmp" | Out-Host -Paging
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Queda copia en temporal.
En la imagen resultados obtenidos de la lista de IPs


Googleando Organizaciones . . .
Sorpresa MS US positivo (varias veces se ve esto) 13.89.220.65      "detection-ratio">1/70<
ColoCrossing US (existe servicios server hosting) 107.173.219.125     "detection-ratio">1/70<
Shinjiru Technology Sdn Bhd ( Web Hosting ) 101.99.70.55     "detection-ratio">1/70<
ISPIRIA Networks Ltd (Netherlands; pises bajos)5.45.66.235     "detection-ratio">1/70<
 ---  ---  ---  ---  ---  ---  ---  ---  ---  ---
sospechozo "ISPIRIA Networks Ltd" no se obtuvo informacion de esta compañia googlendo posiblemente sea falsa; sin embargo obtuvo un positivo de 70 . . en realidad nada de que alarmarse
---  ---  ---  ---  ---  ---  ---  ---  ---  ---
Con el resultado obtenido solo queda
-- Posiblemente no sea nada (como en la imagen solo uno de los motores antivirus dio positivo)
-- Puede ver el analisis completo en VirusTotal.
-- Voler a "Conexiones-00.txt" (su reporte de LiveTcpUdpWatch.exe ) y ver que programas conectan con esas IPs; si es un programa desconocido enviar a VirusTotal, si es un programa conocido ( XD . . XD . .  ) y lo necesita bloquee el programa en el firewall y si lo desea sus IPs.
-- Googlee el programa y averigue su reputacion; de igual forma el sitio de donde lo descargo.
-- Borrar temporales .tmp . . .
    Remove-Item *.tmp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Aun jugando con esto ... ... XD
Ahora realize algunos ajustes si prefieren algo mas completo . . .
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Analisis de IPs PowerShell; en la misma carpeta -- LiveTcpUdpWatch.exe
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"IPs-analizados.txt"  . . . .contenido aqui hasta al final abajo
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# En "IPs-analizados.txt"  (del sistema conocidos-usuales)  - dejar solo IPs. borrar lineas que inicien con "#" y lineas vacias ....
Get-Content "IPs-analizados.txt" | Where-Object {$_ -notmatch '#'} | ? {$_.trim() -ne "" } | set-content "IPs-solos.tmp"
# - - -
# - Aligerar Reporte de  "LiveTcpUdpWatch"  cambiar el nombre a "Conexiones-00.txt"
get-content "Conexiones-00.txt" | Where-Object {$_ -notmatch 'Process ID'} | Where-Object {$_ -notmatch 'Process Name'} | Where-Object {$_ -notmatch 'Received Bytes'} | Where-Object {$_ -notmatch 'Sent Bytes'} | Where-Object {$_ -notmatch 'Received Packets'} | Where-Object {$_ -notmatch 'Sent Packets'} | Where-Object {$_ -notmatch 'Receive Speed'} | Where-Object {$_ -notmatch 'Send Speed'} | Where-Object {$_ -notmatch 'Connect Time'} | Where-Object {$_ -notmatch 'Disconnect Time'} | Where-Object {$_ -notmatch 'Accept Time'} | Where-Object {$_ -notmatch 'Connections Count'} | Where-Object {$_ -notmatch 'Disconnect Count'} | set-Content "Conexiones-01.txt"
# - - -
# - eliminar procesos conocidos: "Agr-privoxy.exe" y "chrome.exe"
Get-Content "Conexiones-01.txt" | Where-Object {$_ -notmatch 'Agr-privoxy.exe'} | Where-Object {$_ -notmatch 'chrome.exe'} | set-content "conex0.tmp"
# - obtener los procesos que no han sido analizados
Get-Content "conex0.tmp" | Select-String 'Process Path' -Context 7,1 | set-Content "Conex1.tmp"
# - - -
# - eliminar IPs revisadas de "Conexiones-00.txt" (Remote Address) y dejar las IPs No revisadas
Get-Content "Conex1.tmp" | Select-String -notmatch (Get-Content "IPs-solos.tmp") | set-Content "Conex2.tmp"
# - obtener IPs que no han sido analizados; si no se genera "Conex-Para-revison.txt"  no hubo nuevas IPs.
Get-Content "Conex2.tmp" | Select-String "Remote Address" -Context 6,2 | set-Content "Conex-Para-revison.tmp"
# - - -
# - - - DETENER SI NO SE GENERO "Conex-Para-revison.tmp"
# - - -
# - Obtener solo IPs por analizar; quitar ruta, sellecionar IPs, eliminar lineas duplicadas y ordena ascendente (defautl)
Get-ChildItem "Conex-Para-revison.tmp" | Select-String -Pattern 'Remote Address    : ' | Foreach-Object {$_ -Replace('^.+Remote Address    : ','')} |  Sort-Object -Unique | Set-Content "Conex-Para-Rev-IPs.tmp"
# - - -
# Analisis en VirusTotal e Informacion MyIP para listas de IPs .... Mientras mas IPs mas demora. . . . . .
get-content "Conex-Para-Rev-IPs.tmp" | Where-Object {$_ -notmatch ':'}  | Foreach-Object {$_ -Replace(' \[.+\]$','')} | ? {$_.trim() -ne "" } | set-content "IPs-procesos0.tmp"
#
$URLList = Get-Content "IPs-procesos0.tmp"
$results = Foreach($Urll in $URLList)
{
$MIPList = $Urll | foreach {"https://myip.es/" + $_ }
$webb = Invoke-WebRequest -Uri $MIPList
$webb.tostring() -split "[`r`n]" | select-string "^\<..\>\<..\>Direcci..n IP:" , "^\<..\>\<..\>Registro PTR:" , "^\<..\>\<..\>Organizaci..n:" , "^\<..\>\<..\>ISP:" , "^\<..\>\<..\>Ciudad:" , "^\<..\>\<..\>Pa..s:" , "^\<..\>\<..\>Estado:" | Foreach-Object {$_ -Replace('^\<..\>\<..\>','')} | Foreach-Object {$_ -Replace('<...><...>$','')} | Foreach-Object {$_ -Replace('<...><..>','  ')} | Foreach-Object {$_ -Replace('Direcci..n IP:','Direccion IP:')} | Foreach-Object {$_ -Replace('Organizaci..n:','Organizacion:')} |  Foreach-Object {$_ -Replace('Pa..s:','Pais:')}
#
$VTList = $Urll | foreach {"https://www.virustotal.com/es/url/submission/?force=1&url=" + $_ }
$web = Invoke-WebRequest -Uri $VTList
$web.tostring() -split "[`r`n]" | select-string "detection-ratio..\d+"| Foreach-Object {$_ -Replace('^ ','')} | Foreach-Object {$_ -Replace('<strong.*id=','VirusTotal  ')} | Foreach-Object {$_ -Replace('.span...strong>$','')}
#
@(" - - - - - - - - - - - - - - - - - - - - - ")
}
$results | Out-File  "detection.tmp"
# - - -
# -- Si no hay IPs positivas VirusTotal no mostrara nada en pantalla. . .queda copia en temporal
get-content "detection.tmp"  | Select-String ".detection-ratio..[1-9]" -Context 7,1 | set-content "detection-positivos.tmp"
get-content "detection-positivos.tmp" | Out-Host -Paging
# - - - A SALVO SI NO SE GENERO "detection-positivos.tmp" - - - Se marcara en rojo.
# - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Borrar temporales .tmp
Remove-Item *.tmp
# Borrar File Analizado
remove-item "Conexiones-00.txt"
 ---  ---  ---  ---  ---  ---  ---  ---  ---  ---
Imagen inferior como lucen los resultados en Host . (queda copia en temporal)


Imagen inferior como lucen los resultados en Temporal.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Por que tanta molestia . . . . Una vez que un dispositivo está infectado, el malware literalmente se comunica con los delincuentes que lo colocan allí y espera instrucciones sobre cualquier actividad criminal que quieran que haga.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Feliz caceria . . :D


No hay comentarios.:

Publicar un comentario