Speculation Control Powershell Module – Meltdown and Spectre
O metoda simpla de a detecta daca un sistem este vulnerabil la Meltdown si Spectre, este via Powershell. Exista un modul numit SpeculationControl ce poate fi gasit si pe script center si in powershell gallery.
Pentru a-l instala din Powershell Gallery folositi comanda Install-Module SpeculationControl:
Iar apoi Get-SpeculationControlSettings.
Dupa cum se vede si in screenshot-ul de mai sus, pentru Spectre e nevoie si de firmware update.
NSLOOKUP–Advanced Tips & Tricks
Am fost rugat de un prieten sa dezvolt subiectul din titlu, pentru ca se pare ca NSLOOKUP inca nu este atat de cunoscut pe cum credeam.
Orice sysadmin trebuie sa stie sa foloseasca NSLOOKUP si este unul din primele optiuni atunci cand investighezi o problema de DNS. Dupa cum spune si numele (Name Server LOOKUP) cu NSLOOKUP puteti adresa interogari DNS direct catre name server facand bypass la cache-ul local.
Tool-ul inca pastreaza multe ciudatenii legacy dar e foarte usor sa treci de ele. Am vazut persoane care credeau ca au o problema cand vedeau Default Server: Unknown (sau UnKnown can’t find : Non-existent domain):
Tool-ul are o problema cu zonele reverse. Adica in sensul ca raporteaza erori atunci cand name serverul folosit nu are o adresa de tip PTR (reverse lookup). Deci daca aveti control asupra serverului DNS folosit (corp network, etc) puteti adauga zona reverse si inregistrarile PTR necesare pentru a face lucrul cu NSLOOKUP mai fluent.
Deci “Default Server: Unknown” nu reprezinta o problema. Serverul folosit este cel implicit de pe sistemul utilizat. Cererile sunt trimise direct catre server si se face bypass la cache-ul local.
Pentru a folosi alt server se foloseste sintaxa SERVER IP ca in exemplul de mai jos:
Sau daca vreti sa interogati direct un ROOT server, folositi comanda ROOT:
Iar cu SET ALL puteti vedea setarile din sesiunea existenta si serverul root folosit:
Puteti schimba si serverul root folosind SET ROOT.
Dar cea mai importanta setare mi se pare cea pentru activarea modului DEBUG. Aceasta se face cu SET DEBUG, iar cu SET ALL se poate vedea daca e activata sau nu. Mai exista si SET D2 (exhaustive debug mode) insa diferentele sunt destul de mici:
Iar in modul debug putem vedea exact intrebarile trimise serverului de DNS precum si raspunsul:
In exemplul meu de mai sus am schimbat din nou cu serverul local pentru ca folosind un root server nu as fi primit un raspuns complet ci un referral (asa sunt setate serverele root, primesti doar referral-uri catre TLD-urile responsabile)
Iesirea din modul debug se face cu SET NODEBUG sau cu SET NOD2. Oricum la iesirea din tool totul revine la default.
Si nu in ultimul rand exista SET TYPE (sau SET QUERYTYPE) prin care specificati ce tip de inregistrari interogati. By default este A (se poate vedea cu SET ALL), insa puteti interoga inregistrarea de tip SOA a unui domeniu folosind SET TYPE=SOA si interogand numele domeniului:
La fel puteti proceda si pentru inregistrari MX, SRV etc.
NSLOOKUP nu este chiar un tool perfect insa daca stiti sa il utilizati va poate grabi investigatia si va poate scuti de o instalare de Wireshark.
List mapped network drives from Powershell and the SMBShare module
Scriam recent de comenzile ce se termina cu PSDrive si aveam si un task in care trebuia sa listez maparile existente ce duc catre un share din retea.
Solutia gasita a fost cu urmatoarea comanda:
Get-PSDrive -PSProvider FileSystem | ? {$_.DisplayRoot -like ‘\\*’}
Dar am descoperit ca in modulul SMB ce il gasiti incepand cu Windows 2012 R2 si Windows 8.1 exista comanda Get-SmbMapping:
Si obtineti acelasi rezultat, dar intr-un mod mult mai simplu.
PS: e foarte interesant si util modulul SMBShare.
PSDrive cmdlets and scope
Ieri am scris despre network drive map via Powershell. Ce mi-a scapat si am aflat si eu dupa, e scopul comenzilor care sincer mi se pare putin ciudat.
Daca rulezi dintr-o sesiune powershell si folosesti -Persist, o sa vezi maparea in Explorer. Dar daca rulezi New-PSDrive dintr-un script, in momentul in care scriptul isi termina executia, drive-ul o sa dispara din Explorer. Asta pentru ca scopul scripului este local (el insusi).
Ca si fix trebuie sa folositi –Scope Global in comenzile cu New-PSDrive:
Daca citeam si documentatia inainte sigur aflam:
- Mapped network drives: You can use the Persist parameter of New-PSDrive to create Windows mapped network drives. Unlike temporary Windows PowerShell drives, Windows mapped network drives are not session-specific; they are saved in Windows and they can be managed by using standard Windows tools, such as File Explorer and Net Use. Mapped network drives must have a drive-letter name and be connected to a remote file system location. When your command is scoped locally (no dot-sourcing), the Persist parameter doesn’t persist the creation of a PSDrive beyond the scope in which the command is running. If you are running New-PSDrive inside of a script, and you want the drive to persist indefinitely, you must dot-source the script. For best results, to force a new drive to persist indefinitely, add the Scope parameter to your command, and set its value to Global.
PS: Am observat si cateva cazuri ciudate. Sunt momente cand Explorer nu isi face refresh si cateodata e nevoie sa restartezi sistemul (posibil sa mearga si doar cu un restart de proces).
Creating network drive mappings with Powershell
Pana de curand NET USE era comanda favorita pentru a crea mapari in retea. Si bineinteles variantele VBScript folosind WScript.Network ce mai apoi au fost preluate si in Powershell versiunile 1 si 2. In schimb incepand cu Powershell v3 lucrurile s-au simplicat putin.
Dar sa o luam din nou de la inceput cu variantele existente:
NET USE X: \\server\share /persistent:yes
Poate fi apelat in continuare din Powershell.
Urmatoarea varianta ar fi prin WScript.network dar via Powershell nu VBscript:
$netobj = $(New-Object -ComObject WScript.Network)
$netobj.MapNetworkDrive("X:", “\\server\share”)
Avantajul este ca se integreaza mai bine in scripturile powershell si exista un alt nivel de control. Si merge pe orice versiune de Powershell.
Dar cea mai buna varianta, in caz ca nu mai aveti sisteme sub Powershell v3 este sa folositi New-PSDrive (nu va lasati pacaliti ca exista si in v1 & 2 ca nu va functiona; lipseste parametrul –Persist):
New-PSDrive –Name “X” –PSProvider FileSystem –Root “\\server\share” –Persist
Cheia este parametrul –Persist, altfel maparea nu va fi vizibila in afara sesiunii Powershell.
Si bineinteles ca mai exista si variantele cu modificat chei de registri, dar sincer nu isi mai au rostul.
Search Active Directory user by email address
Cautarea unui user in Active Directory dupa adresa de email nu ar trebui sa fie ceva foarte dificil, insa cateodata cautarile folosind Get-ADUser pot fi mai ciudate si din cauza asta m-am gandit sa public si sintaxa pentru Get-ADUser prin care se poate face asa ceva.
Iar sintaxa daca vreau sa caut dupa un singur user ar fi ceva de genul:
Get-ADUser -filter "mail -eq ‘aungureanu@source.local’"
Si in cazul in care avem un fisier CSV ce contine o lista cu adresele de email putem folosi acest one liner:
Import-Csv .\emails.csv |%{Get-ADUser -filter "mail -eq ‘$($_.email)’"}
Coloana din fisierul CSV trebuie sa se numeasca Email si atentie la modul in care s-a facut escape la $_.
Intr-un script, folosind For-Each ar fi fost mult mai simplu pentru ca nu ar fi trebuit sa lucram cu $_, dar pentru cine are nevoie de un one liner rapid asta este o varianta foarte buna.
PS: Comanda merge adaptata usor pentru a filtra si dupa alte atribute.
Update Powershell help files on computers without Internet connection
Se mai intampla cateodata sa lucrez pe un sistem remote si sa am nevoie sa ma uit in help-ul unei comenzi din Powershell. numai ca sa aflu ca trebuie sa rulez un Update-Help pentru a downloada continutul de pe Internet.
In afara de faptul ca dureaza, se mai intampla sa nimeresti un sistem ce nu are acces la Internet. Dar exista o varianta si una foarte simpla. Help-ul poate fi downloadat de pe un alt sistem si importat acolo unde avem nevoie.
Comanda prin care realizam acest lucru este Save-Help:
Folosind Save-Help –DestinationPath \\server\share, putem downloada “help-ul” intr-o locatie din retea accesibila si de sistemele ce nu au acces la internet. De retinut ca Save-Help nu va salva continutul aflat deja local pe sistemul de pe care rulam comanda ci va downloada continutul nou de pe internet si il va salva in locatia specificata (fara a-l instala local).
Pe sistemele unde este necesar sa importam continutul downloadat vom rula Update-Help insa cu parametrul –SourcePath.
Si pentru cei ce vor sa aiba continutul updatat la zi, se pot crea scheduled taskuri care sa importe periodic continutul din share.
Easy way to set AD attributes from Powershell
Cand vine vorba de Active Directory, Powershell a inceput sa devina cea mai buna metoda de update a informatiilor. Iar comanda pentru update-ul informatiilor unui user account este Set-ADUser. Daca va uitati in help-ul comenzii o sa observati ca exista deja parametri pentru multe din atributele uzuale din AD. Dar sa zicem ca avem de modificat un atribut custom sau pur si simplu nu stim parametrul necesar, insa stim LDAP Display name-ul atributului.
Tot ce trebuie sa facem este sa folosim Set-ADUser cu parametrul –Replace:
Set-ADUser –Replace @{Description=”Domain Administrator”}
Imediat update-ul se va vedea imediat in directory:
Optiunea va suprascrie orice alta valoare existanta. Iar daca vreti sa setati mai multe atribute folositi urmatoarea sintaxa:
Set-ADUser administrator -Replace @{description="Domain Administrator"; physicalDeliveryOfficeName="Bucuresti"}
Pentru ajustarea atributelor, comanda mai are si parametri –Add, –Clear, Remove. Add poate fi folosit cand nu exista o valoare setata deja, altfel nu va merge pe atributele ce sunt single value. Clear va sterge informatia stocata in atributele specificate (ex: –Clear Description, Title). Si normal ca va intrebati la ce mai foloseste Remove. Nu uitati ca exista atribute multivalued iar Remove se foloseste ca sa stergi o anumita valoare stocata in acel atribut. Iata si un exemplu:
Set-ADUser administrator -Remove @{otherhomephone="222"}
Set-ADUser administrator -Remove @{otherhomephone="222"}
Using multiple filters with Get-ADComputer
Modul in care filtrezi informatia prin cmdleturile din modulul Active Directory nu sunt prea bine explicate in documentatie si nici nu sunt exemple clare. Exemplul meu de azi va fi pentru Get-ADComputer dar se poate folosi si cu alte comenzi.
Filtrarea informatiilor cu parametrul Filter din comanda va ajuta sa micsorati cantitatea de data culeasa de pe domain controller si va scuteste din a filtra datele in Excel.
Cel mai simplu exemplu este cel cu Get-ADComputer – Filter * ce va returna toate computer accounturile din AD.
Dar daca renuntam la *, regula este ca filtrul trebuie sa fie continut intre acolade sau ghilimele. O sa aleg acolade pentru ca se vad mai bine in exemple.
Get-ADComputer -filter {Name -like ‘w*}
Exemplul asta mi-a listat obiectele ce incep cu litera W. Dar o sa vreau sa folosesc mai multe conditii asa ca o sa adaug si conditia ca obiectele sa inceapa si cu litera S.
Get-ADComputer -filter {Name -like ‘w*’ -or Name -like ‘s*’}
Si in continuare putem sa adaugam inca un OR sau altceva. Daca totusi vrem sa folosim conditiile existente SI o alta conditie aditionala atunci trebuie sa ne folosim de paranteze ca in urmatorul exemplu:
Get-ADComputer -filter {(Name -like ‘w*’ -or Name -like ‘s*’) -and (Enabled -eq ‘false’)}
Sper sa aiba sens ce am scris pana acum. O lista cu operatorii suportati gasiti in documentatie:
https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-adcomputer?view=win10-ps
PS: Sunt variante si cu parametrul –LDAPFILTER, dar asta daca esti familiar cu interogarile LDAP.
Uninstall corrupted Windows programs
Tocmai ce ma rugase un prieten sa il ajut sa dezinstaleze ceva soft-uri Apple, care nu mai mergeau dezinstalate in mod traditional cu optiunea uninstall. Sa te duci de mana sa cureti prin registry, ar dura o vesnicie, asa ca am apelat la Microsoft Program Install and Uninstall Utility.
Merge pe toate versiunile de Windows de la 7 la 10.
Si cam atat. Doar selectezi aplicatia si ai rezolvat. In cazurile in care l-am folosit eu chiar a functionat. In felul asta am reusit sa fac reinstall la aplicatiile problematice.