Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > default
květen 19
Moje prezentace z konference #TechEdDevCon 2015

Parádní publikum! Díky všem!

Moje prezentace z letošní konference TechEd DevCon 2015 jsou k dispozici zde.​

Poznámka k mé přednášce o RDP: na přednášce mi nejelo Kerberos ověření z internetu přes RD Gateway (RDG, Remote Desktop Gateway). Až potom jsem si uvědomil, že jsem zapomněl do toho ​.RDP souboru vložit hodnotu rdgiskdcproxy:i:1. Prostě se to nesmí zapomenout na klientovi povolit. 

Ale slibuju, že na ten SSO z internetu přes RDP Proxy napíšu v brzku článeček.

květen 11
OT - proč lidi nechápou statistiku a korelaci

Dneska OT (off-topic). Minulý čtvrtek jsem si do vlaku koupil dva politicko-společenské časopisy a zdá se, že x autorů nepochopilo, na co je statistika. Hlavně jim nedochází, že nemohou vyvozovat na nějakou závislost dvou jevů čistě z toho, že to oboje dává vysoká procenta :-)

Klasický příklad na ne-korelaci

Mějme dvě tvrzení. Asi jsou pravdivá, nevím. Ale to není důležité.

  • Švýcaři se dožívají v průměru nejvyššího věku
  • Švýcaři konzumují nejvíce čokolády na světě

Plno lidem z toho automaticky plyne výsledek, že se dožívají tak vysokého věku, protože ce cpou čokoládou. Ale to je jenom to, co ti lidi chtějí, aby plynulo.

A to je právě ten omyl. Proč by muselo? Nemůže to být tak, že žerou tolik čokolády právě proto, že se dožívají tak vysokého věku a chtějí si trošku zpříjemnit dlouhý pobyt v domově důchodců? A není to tak, že i když žerou tolik nezdravé čokolády, tak to věčné odhánění much požírajících kravnice na pastvinách jim procvičuje krevní oběh?

Jak snad už pochopíte, ani jedno.

Ze dvou statistik na dvou nějakých jevech se nedá usuzovat ani to kravské lejno. Obecně řečeno, nejprve musíme mít nějaké jiné důkazy pro závislost těch dvou jevů a teprve potom můžeme použít statistiku k posouzení jejich vzájemné míry. Ale nemůžu jenom ze statistiky vyvozovat ten vztah. Tomu se říká implikace, jak by řekl pan Studnička!

Trošku opačný business přístup

Co třeba toto - prodávám čokoládu. Je pro mě výhodnější ji prodávat do Švýcarska? Jasně. Delší věk, větší žrouti => větší prodeje. Může mi být úplně jedno, jestli to spolu souvisí, nebo nesouvisí. Když ty dvě hodnoty vynásobím, tak mám lepší zisk.

Tady ale neřeším závislost těch dvou charakteristik. Tady prostě násobím zisky z jednoho i druhého výroku samostatně. Ale už nemůžu čekat, že v jiné zemi, kde se taky dožívají tak vysokého věku, budou taky žrát čokoládu jak zběsilí (i kdyby ten věk mohl záviset jen na jednom faktoru).

A odpověď na otázku z nadpisu?

...

Pozdější úprava: Ještě jeden pohled na věc

Co když máme stejné statistiky pro různé země, kde si tyto dva výroky "odpovídají" nebo jak bych to nazval. Tzn. méně čokolády vs. kratší život, více čokolády vs. delší život. Můžeme z toho vyvodit, že konzumace čokolády prodlužuje život?

Opět nemůžeme. Vždycky to může být přece důsledek jednoho, nebo druhého a stejně tak to může být ve všech případech důsledek něčeho třetího.

Jediné co jsem ochoten uznat je, že v tomto případě je nějaká "důsledkovost" už alespoň trošku vidět. Ale pořád nevíme co je příčina a co je důsledek.

květen 04
Všem firmám trvá nekonečně dlouho, než zjistí ztrátu dat

Nedávno mě upozornili na tento článek: http://businessworld.cz/bezpecnost/trem-ctvrtinam-firem-trva-radove-hodiny-nebo-dny-nez-zjisti-kradez-dat-12245

Tak jsem si to přečetl a podle mě je to celé nesmysl. Krádež dat nelze zjistit. Na rozdíl od pevných věcí, jako jsou papírové peníze, kusy zlata, nebo spodní prádlo. Když si někdo zkopíruje vaše data, tak to nemáte jak poznat. Alespoň ne do okamžiku, než se tato data objeví viditelně někde, kde si jich všimneme. A i tak se dá jen velice těžko usuzovat, že to jsou "naše data".

Samozřejmě existují k tomu různé metody, například vodoznačky. Zabývá se tím celá věda zvaná steganography, která se taky zabývá tím, jak to v datech odhalit a případně se toho zbavit (poznámka, přijďte na kurz CHFI do GOPASu).

I v případě pevných věcí si nemůžete být nikdy jisti, že krádež odhalíte nějak "proaktivně". Kontra příklad je bankovní sejf. Můžete mít nejprve třeba jen detekci na dveřích, jestli je někdo neotevřel. Banditi se prokopou přes zeď. Tak tam dáte detekci do zdi. Banditi odpojí elektřinu. A zase to pozná až nějaký chudák, co si přišel vybrat svoje úspory. Neexistuje absolutní ochrana. Vždycky se najde protiútok. Viz. dokonce nedávný případ v Británii, který jsem úplně náhodou objevil až po napsání tohohle přízpěvku. Dobře, tak tam měl sedět borec a čumět na kameru, jestli se vevnitř neválí otevřené sejfy. Bandita nasadí předehranou smyčku na kameru. To jsme viděli v různých akčňácích milionkrát. A tak pořád dokola.

Takže se zamysleme, co asi tak může někdo detekovat a co ne?

Antimalware může detekovat binární signaturu celosvětově známého, profláknutého, viru. Neexistuje, že by mohl být úspěšný vůbec v detekci ručně provedeného útoku. Důkaz jsem předvedl na podzim na konferenci HackerFest a na jaře na ShowIT.

Intrusion detection system (IDS) může opět detekovat nějaké známé signatury síťových útoků. Pokud útočník ví, co takový systém detekuje, jistě si najde cestu, jak to udělat, aby se detekci vyhnul. Na důkazní přednášce na letošní HackerFest se pracuje :-)

Snad jediná věc, u které jsem ochoten uznat, že lze detekovat velmi rychle a spolehlivě je DoS útok. Služba přestane fungovat a uživatelé se ozvou. Myslím, že každý má zkušenost, že uživatelé jsou ty nelepší detektory libovolného výpadku :-)

A dojděte na teched, už je pomalu vyprodáno!

duben 29
RestrictedAdmin režim RDP připojení a jak to vlastně funguje

Jistě si vzpomínáte na množství mých článků ohledně Kerberos a Kerberos delegation a v poslední době například o vykrádání hesel z paměti počítače. V dnešním přízpěvku to všechno zúročíte.

Také se jedná o vaši povinnou přípravu na konferenci TechEd, kde budu mít související přednášky! Všichni přihlásit! Pokud to nepochopíte, můžete naopak dorazit na můj kurz Kerberos Troubleshooting do GOPASu a já už to do vás dostanu.

RDP připojení a kradení hesel

Jak jsem už psal několikrát, RDP ověřování je ve své podstatě jednoduchá basic authentication. Podobně jako HTTP basic authentication, nebo LDAP simple bind. Ano, komunikační kanál je šifrovaný, optimálně pomocí TLS (SSL). Ale uvnitř něho se vždy přenáší heslo v plné formě. Na straně RDP serveru (terminal server) ho přijme tamní LSASS proces a uloží si ho v operační paměti.

Poznámka: LSASS je local security authority sub system, tedy proces, který "ověřuje uživatele", vytváří access tokeny, uchovává LSA secrets tajná data (jako je třeba heslo počítače do domény v klíči $MACHINE.ACC, nebo hesla ke službám apod.). Taky o tom hojně pojednávám ve svém MVA kurzu.

Pro uživatele samozřejmě vytvoří na základě tohoto hesla access token. podle Kerberos, nebo při nejhorším NTLM ověření v Active Directory. Je to úplně stejné, jako byste se přihlašovali interaktivně lokálně na počítači pomocí ctrl-alt-del, jenom má váš monitor trošku delší kabel.

Znamená to, že po dobu běhu vaší terminal RDP session je plnotextové heslo v paměti. Je tam potřeba, abyste mohli chodit z RDP serveru neomezeně po síti. Pokud je v paměti, je možné ho ukrást. Nebo ho zneužije automaticky i při UAC. Útočník potřebuje práva lokálního člena Administrators, nebo minimálně uživatelské právo Debug programs. Jak se stát lokálním adminem jsme si už ukazovali tisíckrát, dokonce na všech možných konferencích, jako je TechEd, ShowIt nebo HackerFest.

Pokud byste plain-text heslo na RDP nedostali, chovalo by se to celé podobně, jako v případě PowerShell remoting pomocí Enter-PSSession, nebo Invoke-Command s Kerberos ověřením. Nešlo by se tedy dostat na žádné další síťové služby. Museli byste dodatečně zadávat hesla. Naopak PowerShell remoting s CredSSP ověřením je přesně opačný, je to taky "basic" authentication a transportuje to do vzdáleného počítače opět heslo, stejně jako právě RDP.

Rizika vzdálené správy stanic

Jak jste mohli vidět, není dobrý nápad připojovat se na stanice, nebo obecně libovolné nezabezpečené stroje, se silným heslem. Bezpečná metoda je pouze vzdálené připojení při bezpečném Kerberos ověření. Takové spojení do vzdáleného počítače netransportuje nic, co by se tam dalo vychytat.

Znamená to tedy používat buď MMC konzole, PowerShell, nebo PowerShell remoting s Kerberos ověřením (a nikoliv CredSSP, to je taky basic authentication), WMI, LDAP, SQL konzoli a podobně.

Naopak RDP a PowerShell remoting s CredSSP ověřením je nebezpečný. Což je škoda, protože RDP je velmi pohodlné a každý ho rád používá. Ještě poznámečka k oblíbenému TeamViewer, to je samozřejmě to stejné, ještě podstatně horší, protože si tím otevíráte díru do sítě kdoví odkud z internetu - stačí spustit a tradá.

Windows 8 a Windows 2012 přicházejí s restricted admin (restrictedadmin) režimem vzdálené plochy

Proto Windows 8 a Windows 2012 dorazily s novinkou. Noví klienti (mstsc) nemusí do vzdálené plochy posílat plné heslo. Prostě si vygenerují TGS ticket pro TERMSRV SPN a tradá. Na vzdáleném počítači potom není heslo v paměti. Ve skutečnosti tam v paměti není nic. Takže není co vykrást. Samozřejmě taky ale není co použít na přístup do sítě. Ale to u stanic nejspíš vůbec nevadí!

Stačí spustit mstsc s přepínačem restrictedadmin. Bohužel to nejde napsat až později do adresního řádku, ale to není taková tragédie.

mstsc /restrictedadmin

Následuje pár obrázků:

Na posledním obrázku už vidíte pokus o přístup do sítě na nějaký admin share, nebo třeba pomocí WMI vypsat seznam procesů ze vzdáleného počítače. Budete obecně dostávat access denied, protože do sítě chodíte anonymně (anonymous logon).

Text v obrázku říkající "your windows logon credentials will be used to connect" je shodný s textem, který se vám tam zobrazuje, pokud máte zapnuto RDP SSO (single-sign-on, neboli Credentials Delegation). Na pohled to nelze rozlišit, musíte prostě vědět, jak jste program spustili.

Požadavky?

K tomu, abyste se na vzdálený počítač dostali, musíte na něm být členem skupiny Administrators. Nestačí mít jen obecně přístup na RDP (remote desktop users). Pokud máte RDP přístup, ale přitom nejste členem skupiny Administrators, tak dostanete tuto hlášku: Account restrictions are preventing this user from signing in. For example: blank passwords aren't allowed, sign-in times are limited, or a policy has been enforced.

Proč?

To ale není všem dnům konec

Pokud se ale do sítě pokusíte dostat, někam se ve skutečnosti dostanete. Není to divné? Docela mě to překvapilo:

To přece není možné. Když jsem se někam nedostal, ale zato jinam ano? Ona tam je úplně ultra mega fíčura. Po připojení vám LSASS na RDP serveru vytvoří access token. Samozřejmě podle obsahu vašeho TGS ticketu. Takže na serveru jste lokálně jako vy sami, máte správné doménové skupiny apod.

Ale k tomuto access tokenu vám LSASS vloží do paměti síťové heslo účtu počítače. Péklo. Takže po síti chodíte jako ten počítač. V mých obrázcích se počítače jmenuje GPS-DATA1, takže všude chodíte pod účtem GPS-DATA1$.

Důkaz je v klist výpisu:

To je taky důvod, proč tenhle režim nemohou využívat obyčejní uživatelé. Znamenalo by to pro ně získat nelegálné účet počítače a to samozřejmě nechceme.

Důvod pro tuhle últra specialitu je pravděpodobně ten, aby se GUI programy, které si na vzdálené ploše spouštíte, mohli alespoň trošku podívat do sítě, speciálně do Active Directory. Ony, narozdíl od síťových služeb, nejsou moc přizpůsobené se vyhýbat síťovým čtením.

Pro zajímavost, tohle se dá vypnout v HKLM\System\CurrentControlSet\Control\LSA, DisableRestrictedAdminOutboundCreds = DWORD = 1 a budete totálně odříznuti. To ale není žádná ochrana, protože by samozřejmě stačilo spustit si cokoliv pod účtem SYSTEM, nebo Network Service.

A tak to je.

duben 27
Odpověď - jak je to vlastně s hesly v Internet Exploreru

Redakce našeho populárně naučného časopisu dostala následující dotaz:

"Existuje na IIS web s Windows Authentication. Přihlásím se na něj přes internet doménovým jménem/heslem. Když tam vlezu druhý den ze stejného prohlížeče (comp nevypínám), vesele mě to příhlásí, aniž by to znovu chtělo heslo. To mě teda dost překvapilo."

Odpověď poněkud rozveďme, ať tomu dáme trošku rámec.

Ověřovací metody v Internet Exploreru

Do webových aplikací je možno zaslat heslo jednou z následujících metod:

  • HTTP basic authentication - čístotextové heslo, bez nějakých zašifrování. Samozřejmě je možno ho chránít pomocí TLS (to jak tomu někdo říká SSL), ale principiálně se přenáší plné heslo. Na IIS web serveru se nejspíš ověřuje vůči doménovým účtům, i když by to mohla vyvolat i webová aplikace samotná a používat svoje vlastní aplikační účty z nějaké databáze.
  • Windows authentication - heslo cestuje v nějaké "zašifrované formě". Jedná se o dva protokoly, buď NTLM (obecně řečeno - ono to má tři verze), nebo Kerberos. V případě NTLM opravdu cestuje heslo v "zahešované" formě (MD4 heslo v HMAC-MD5). V případě Kerberos cestuje pouze TGS tiket, který s heslem uživatele nemá nic společného.
  • Forms-based (cookie-based) authentication - prostě aplikační webová stránka, která po vás chce zadat login a heslo. Heslo cestuje obvykle v plné formě, podobně jako při HTTP basic ověření, ale viděl jsem i weby, které ho o něco lépe chránily (proti TLS strip a vůbec HTTPS inspection). Potom, co si vás webová aplikace ověří, vám web server vydá nejspíš nějakou HTTP cookie. Samozřejmě nemusí, to už je na něm, jak si vás bude pamatovat (například i jen podle IP adresy).

HTTP basic authentication a Windows authentication je součástí HTTP hlaviček. Forms-based authentication se posílá nejspíš jako součást těla POST požadavku, někdy (velmi nevhodně) v podobě GET parametrů.

V případě HTTP basic authentication a Windows authentication na vás může prohlížeč vyskočit s normálním okénkem, kam přihlašovací údaje zadáte. V případě forms-based se jedná o formulář na HTML stránce.

Automatická, uložená, nebo zadaná hesla

Do přihlašovací stránky (forms-based), nebo do přihlašovacího okénka může uživatel něco zadat. Prohlížeč obvykle nabízí možnost tyto informace uložit pro další použití automaticky. Pokud jsou k dispozici Kerberos nebo NTLM přihlašovací údaje uživatele operačního systému (zadané při ctrl-alt-del), prohlížeč je může automaticky použít k odeslání.

Ano, pokud uživatel jednou zadá basic nebo Windows authentication údaje, tyto zůstávají v paměti procesu prohlížeče až do jeho finálního ukončení, bez ohledu na to, jestli jste vybrali "uložit" nebo ne. Pod pojmem proces myslím stejný Windows process. Což zahrnuje také nově otevřené taby (ctrl-t), nově otevřená okna (ctrl-n). Prohlížeč takové údaje nezapomene ani po nějaké době nečinnosti, ani pokud přejdete na úplně jiné stránky. Důvodem je nejspíš jednoduchost jejich funkce a nezávislost na nějakých "oknech" a konkrétních "tcp spojeních". Prohlížeč prostě nemá možnost, jak jednoznačně poznat, že uživatel už práci s danou stránkou "ukončil". A standard mu žádné konkrétní doporučení nedává. Kromě faktu, že nesmí posílat ty údaje do jiných host header webů.

Trvanlivost forms-based přihlašovacích údajů si naopak řídí kompletně webová aplikace a prohlížeč o nich nemá v podstatě ani ponětí. Prohlížeč pouze udržuje v paměti cookies, nebo libovolnou jinou formu identifikace, kterou si webová aplikace vymyslela. Tady se aplikace může sama rozhodnout, kdy přestane dané cookie přijímat, kdy je zruší a jestli nabídne uživateli nějakou možnost explicitního odhlášení.

Obě metody jsou samozřejmě náchylné na cross-site scripting a vůbec brouzdání cizích osob po historii. V případě forms-based authentication se obvykle limituje životnost cookies. V případě HTTP authentication jako je basic, nebo Windows authentication se doporučuje uživatelům zavírat pořádně okna prohlížeče. Vzhledem k obvyklému intranetovému SSO to je ale i tak zbytečné.

Ještě k SSO a výchozím přihlašovacím údajům systému

Obecně se prohlížeč pro intranetové weby bude snažit použít výchozí přihlašovací údaje uživatele z operační systému (Kerberos nebo NTLM zadané při ctrl-alt-del) automaticky, aby tak dosáhl SSO (single-sign-on). SSO je maximálně žádoucí, protože to snižuje opakované zadávání přihlašovacích údajů - ochrana proti odpozorování, keyloggerům atd - tak jak si žádá například i ISO/IEC 27001/27002.

Pokud se ovšem jedná o automatické zasílání SSO přihlašovacích údajů, uvědomme si, že neexistuje možnost odhlášení (logoff). Kdykoliv okno prohlížeče zavřete, nebo i kdybyste dali libovolně aplikaci vědět, že již nechcete pracovat, při příštím otevření stránky se stejně automaticky použijí výchozí přihlašovací údaje systému.

Hesla ukládaná ručně "v prohlížeči"

Pěkný referenční článeček zde.

Internet Explorer (IE) ukládá hesla z formulářů buď jako tzv. "autocomplete passwords" až do verze IE 9. Hesla z formulářů ukládá do uživatelových registrů v plné formě, jen lehce chráněné. Umístění je:

HKCU\Software\Microsoft\Internet Explorer\IntelliForms\Storage2

kde se objevují REG_BINARY hodnoty. Je to tu ale jaksi "zašifrováno" pomocí URL (jeho SHA-1 hash) webové přihlašovací stránky. To znamená, že pokud nevíte, jaké URL to bylo, heslo z toho nedostanete. Naopak, pokud byste věděli URL, heslo se dešifruje v plné formě. Existují na to samozřejmě různé krekry. Ukládání hesel z formulářů se dá vypnout pomocí registrové hodnoty DisablePasswordCaching:

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
DisablePasswordCaching = REG_DWORD = 1

Od verze IE 10 se ukládají hesla do Windows credentials manager, stejně jako hesla pro HTTP authentication viz. dále.

Hesla pro HTTP basic a Windows authentication ověřování se ukládají do tzv. credentials manageru, neboli Windows vault. To je to, co najdete od Windows Vista v Control Panel v panelu User Accounts vlevo, kde se dá kliknout buď Manage your network passwords, nebo Manager your credentials. Zde se to rozděluje na dvě části. Hesla systému Windows a od IE 10 i hesla webová. Hesla systému Windows - tedy hesla pro intranetový Kerberos, NTLM, nebo i Basic ověření - se dají prohlížet i na starších systémech a serverech viz. můj dřívější článek.

Credentials manager si ukládá tajná data na disku v profilovém adresáři uživatele:

%appdata%\Microsoft\Credentials

Opět je možné je odtud samozřejmě dostat. Údaje jsou zde chráněné pomocí DPAPI (Data Protection API) a jsou principiálně šifrované uživatelovým přihlašovacím heslem. To je samozřejmě trošku složitější, protože takhle by se uživatelům nemohlo resetovat heslo, ale to je už jiná pohádka. Pro nás je podstatné, že je odtud dostane libovolný program běžící jen pod účtem uživatele. A to i v případě, že bylo uživateli správcem vyresetováno heslo.

A to jsou důvody, proč není moc bezpečné nechat lidi ukládat hesla na počítačích. Pokud chcete vypnout Credentials manager, můžete tak učinit pomocí Group Policy nebo Local Security Policy:

Computer configuration
    Windows Settings
        Security Settings
            Local Policies
                Security Options
                    Network access: Do not allow storage of passwords
                    and credentials for network authentication

Neukládat, zavírat!

duben 16
Dnešní online přenos z WUG na téma PowerShell pro pokročilé

Dneska mám premiéru. Poprvé se pokusím svoji přednášku pro WUG (PowerShell pro pokročilé) přenášet online pomocí livemeetingu. Kdo máte zájem, můžete se zkusti připojit, začíná to od 17:00, ale asi tam musíte být dříve. Nevím ještě. Nevím v jaké to bude kvalitě, jak to bude fungovat a nevím, jak moc budu schopen to ovládat, tak buďte prosím trpěliví.

Nevím který link je ten správný, zkuste jeden z nich:

https://www.livemeeting.com/cc/mvp/meet/TH887C 

https://www.livemeeting.com/cc/mvp/join?id=TH887C&role=attend&pw=sevecek

Položka do kalendáře je tady: ​https://www.livemeeting.com/cc/mvp/meetingICS?id=TH887C&role=attend&pw=sevecek&i=i.ics

​Tak zkusíme a uvidíme! Těším se!

PS: Těším se na setkání na TechEd 2015!

duben 15
Dobře alza!

Pěkně. Dneska jsem zavítal zase jednou na alza.cz a ​už je to všechno v cajku, jak má být! Dokonce se vytáhli se zeleným certifikátem.

Takže výtka z mého staršího článku už není pravdou. Pochvala.

A dívám se, že se toho nebojí a mají rovnou hustě 256bitový certifikát.

Taky se můžete podívat sem, mají test za A. A to ten test nezohledňuje PFS preferenci (ECDH algoritmy). Ode mě by za tohle dostali AAA.

Mají i Strict-Transport-Security (HSTS) a mají ho dobře udělané, protože to vracejí i ve všech HTTPS odpovědích, což jsem už párktár viděl, že ne každý dělá (překvapivě). Zkoušel jsem se tam dostat přes čisté HTTP a nelze. Vždycky dostanete 301 permanent redirect. Teď už jenom aby to IE začal podporovat. Jsou dokonce už i předloudnutí.

Tak sice už jen škoda, že mě tím zmizel příklad chybného webu, tedy kromě mého :-)

​PS: Těším se na setkání na TechEd 2015!

únor 17
Můj první MVA kurz

Můj první MVA (Microsoft Virtual Academy) kurz byl vydán právě před několika hodinami.​ Jedná se o Bezpečnost Windows pro pokročilé. Děkuji tímto Tomáši Kantůrkovi z Microsoftu, protože připravit to do provozu musela být pěkná dřina.

Další budou doufám v brzu následovat!

http://www.microsoftvirtualacademy.com/training-courses/bezpecnost-windows-pro-pokrocile-identity

únor 17
Moje slajdy z konference ShowIT 2015

Tak tohle byla naprosto luxusní konference! Parádní prostředí, katering, projekce!

Všechny moje slajdy jsou tady: https://www.sevecek.com/presentations/showit2015

únor 04
ISEčko jde skriptovat - automatické podepsání všech rozdělaných skriptů přímo z vývojového prostředí

Digitální podepisování PowerShell skriptů mě v poslední době docela otravuje, protože to zbytečně zdržuje. Kdykoliv uděláte nějakou změnu ve skriptu, musíte to nechat znovu podepsat. A PowerShell ISE má značný nedostatek v tom, že si nevšimne, když se soubory změní mimo prostředí. Takže je znovu nenahraje. Potřeboval jsem tedy primárně metodu, jak nechat pozavírat všechny soubory a znovu je otevřít. A vyklubalo se z toho toto:

Udělal jsem si tedy skript, který digitálně podepíše otevřené soubory (sign) rovnou z ISE. Řeší to několik problémů:

  • musíte nejprve neuložené soubory uložit. Nechcete ukládat už uložené, protože by to zbytečně změnilo jejich časová razítka
  • potom je musíte zavřít
  • abych zbytečně nezavíral všechny soubory, zavírám jenom ty, jejichž digitální signatura (digital signature) není platná. A pouze .PS1 přípony, ono ISE má i pěkné obarvování XML, které rád používám
  • podepsat ty soubory, co jste zavřeli
  • otevřít je znovu do ISE
  • a nastavit zpátky kurzor na pozici, kde byl před tím, než jsem je zavíral - jinak budete na začátku, což je dost otravné

Tady to je. Používám $psISE proměnnou. Funkci jsem si dal do PowerShell ISE profilu ($profile.AllUsersCurrentHost) a jede to jak po másle:

function global:Sign-ISE ([string] $signingCertSubjectMail = 'ondrej@sevecek.com')
{
  [System.Security.Cryptography.X509Certificates.X509Certificate2] $signingCert = $null
  $signingCert = dir Cert:\CurrentUser\My -CodeSigningCert | ? { $_.Subject -like "*E=$signingCertSubjectMail*" | Sort NotAfter | Select -Last 1 }
  
  if ($signingCert -ne $null) {

    $openFiles = $psISE.CurrentPowerShellTab | % { $_.Files }

    foreach ($oneOpenFile in $openFiles) {
 
      $oneFilePath = $oneOpenFile.FullPath
      $oneFileLine = $oneOpenFile.Editor.CaretLine
      $oneFileColumn = $oneOpenFile.Editor.CaretColumn
 
      if (-not $oneOpenFile.IsSaved) {

        [void] $oneOpenFile.Save()
      }


      if (([System.IO.Path]::GetExtension($oneFilePath) -eq '.ps1') -and ((Get-AuthenticodeSignature $oneFilePath).Status -ne 'Valid')) {

        [void] $psISE.CurrentPowerShellTab.Files.Remove($oneOpenFile)
        [void] (Set-AuthenticodeSignature $oneFilePath -Certificate $signingCert)
        $reloadedFile = $psISE.CurrentPowerShellTab.Files.Add($oneFilePath)
        $reloadedFile.Editor.SetCaretPosition($oneFileLine, $oneFileColumn)
      }
    }

  } else {

    throw 'Error: no signing certificate found'
  }
}

Dá se dokonce přidat do menu Add-ons volba na tuto funkci. A to všechno i s asociací klávesové zkratky. Takto:

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Sign all", { Sign-ISE }, 'Ctrl+Alt+S') 

 

únor 03
Nezadržitelně se blíží konference ShowIT

Od příštího úterý se koná v Bratislavě velkolepá konference ShowIT 2015! Ještě zbývá pár posledních míst, tak se honem přihlašte!

Moje přednášky:

  • Útoky, které žádný antivirus neodhalí, aneb na co je infrastrukturní bezpečnost
  • Principy Windows ověření a SSO
  • Nová dimenze bezpečnosti - přihlašování čipovými kartami
  • Bezpečné publikování webových služeb s pomocí Web Application Proxy (WAP)
  • Nasazení RODC do DMZ
  • Bezpečnostní aspekty platformy SharePoint 2013
  • TLS/SSL protokoly ve Windows
  • Kerberos delegace neboli double-hop
  • PowerShell pro pokročilé

Letos s velkou účastí spíkrů z Microsoftu. Konečně opět ve čtyřhvězdičkovém hotelu, takže se můžete těšit na skutečný katering a vyhřáté prostředí. Samozřejmě ve středu bohatá večerní akce.

leden 30
Bez komentáře - jen moje poznámky k řešení potíží s Claims to Windows token service (c2wts)

Tohle ani nečtěte. Jen jsem si chtěl někam poznačit věci, které jsem používal k řešení potíží s claims to windows token service (c2wts, c2wtshost), neboli Windows Identity Foundation(WIF). Nebudu to vysvětlovat, takže jenom pro moji vlastní referenci.

# Kerberos S4U login with UPN only
# Common problems - the caller must be member of "Windows Authorization Access Group"
# or at least have Read permission to tokenGroupsGlobalAndUniversal AD LDAP attribute of the subject account
# If the caller is not member of local Administrators or does not have SeTcbPrivilege, the resulting access token will only be at the Identification level
$s4u = New-Object System.Security.Principal.WindowsIdentity 'sp-admin@gopas.virtual'

# Using identity foundation and the c2wts service
# Common problems - the caller must be listed among the allowedCallers in the c2wtshost.exe.config file or you get the "wts0003: the caller is not authorized to use the service" error.
# Later permission issues manifest themselves with "Token cannot be zero" exception
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.IdentityModel')
[System.Security.Principal.WindowsIdentity] $winId = [Microsoft.IdentityModel.WindowsTokenService.S4UClient]::UpnLogon("sp-admin@gopas.virtual")

# Get the c2wts named pipe and the net.pipe URL
# The pipe name will be a random {guidguid-guid-guid-guid-guidguidguid}
# it seams like it is always with 8 instances. But the simplest way
# to determine which one it is, is to get the list before and after the c2wts
# service is running and compare
[System.IO.Directory]::GetFiles('\\.\pipe')
pipelist | ? { $_ -like '*-*-*-*-*' }

$pipeName = (t:\sysinternals\handle.exe 'net.pipe:' | ? { $_ -like 'c2wtshost.exe*' } | % { $_.Split('\') } | select -l 1 | % { $_.Split(':') } 

| select -l 1).SubString(1)
$bytes = [convert]::FromBase64String($pipeName)

# The result was
# net.pipe://+/S4U/022694F3-9FBD-422B-B4B2-312E25DAE2A2/
# which is a normalized version of the following: net.pipe://localhost/S4U/022694F3-9FBD-422B-B4B2-312E25DAE2A2/
[System.Text.ASCIIEncoding]::ASCII.GetString($bytes)


# The SharePoint Secure Store error when trying generate key through the central admin
# solution was to make the Secure Store service account be member of local Administrators
# but this is not what would satisfy me :-)
Exception calling "UpnLogon" with "1" argument(s): "Token cannot be zero."
SPSecurityContext Could not retrieve valid windows identity username Token cannot be zero
.Exception.HResult = -2146233087 = COR_E_SYSTEM
.Exception.InnerException.HResult = -2147024809 = COR_E_ARGUMENT

 

leden 29
Asynchronní spouštění PowerShell skriptu

Začal jsem pokusovat s asynchronním vykonáváním skriptů (příprava na Forms a GUI obecně). Není úplně dobré na to používat Start-Job, protože ten normálně spustí znovu celý PowerShell proces, což je trošku velký kalibr. Tak jsem prozatím zjistil tohle. Což je mimochodem taky cesta, jak vůbec volat PowerShell skripty z C#.

Běží to opravdu krásně asynchronně. Ještě k tomu přidám nějakou další diagnostiku a jdu do toho. Hlavně vymyslet, jak si předávat objekty za jízdy z jednoho vlákna do druhého. Což o to, vymyslet by to tak těžké nebylo, jako že to budu muset vyzkoušet. Miláček PowerShell není úplně vždy moc milý k programátorům :-)

[System.Management.Automation.PowerShell] $powershell = [powershell]::Create()

$script = @'
  param([int] $delay = 4)

  $testFile = "$env:TEMP\test.txt"
  '----' | Out-File $testFile  -Append
  (Get-Date).ToString('s') | Out-File $testFile -Append
  Start-Sleep $delay
  (Get-Date).ToString('s') | Out-File $testFile -Append
  
  return 58, (Get-Process lsass), 'text'
'@

$powershell.AddScript($script)
$powershell.AddParameter('delay', 6)
$async = $powershell.BeginInvoke()

Write-Host ('Async: {0}' -f ($async | fl * | Out-String)) -ForegroundColor Green

try {

  # Note: break manually with Ctrl-C
  #       it will go through finally{} well
  while ($true) {

    $now = [DateTime]::Now
    Write-Host ('Main: {0:s}:{1:D3} | thread completed = {2}' -f $now, $now.Millisecond, $async.IsCompleted)
    
    Start-Sleep -Milliseconds 300
  }

}

finally {

  Write-Host ('Pre-finished: {0:s}' -f (Get-Date)) -ForegroundColor Green

  # Note: this will wait until the task has really finished
  $results = $powershell.EndInvoke($async)
  $powershell.Dispose()

  Write-Host ('Finished: {0:s}' -f (Get-Date)) -ForegroundColor Green
  
  Write-Host ('Results: {0}' -f ($results -join ', '))
  Write-Host ('Result types: {0}' -f (($results | % { $_.GetType().Name }) -join ', '))
}


Dobrou.

leden 23
Blesk peněženka

Nudím se v nemocnici, tak jsem si koupil v trafice Blesk peněženku a zkoumám to (web mají na www.bleskpenezenka.cz). Jedná se o platební kartu, kterou si koupíte za 150,- Kč v trafice. Dostanete MasterCard, normálně s číslem a CVV vzadu, platí mi do 10/17. Zdá se že je i bezkontaktní (idioti). Potom už to jenom dobíjíte přes Sazka terminály, přes internet z jiné platební karty (který musí mít 3D Secure), nebo převodem z účtu.

Na co to je? Někdo díky tomu může mít totálně anonymní platby, jako třeba když se rozvádíte a potřebujete vypadat jako socka. To já nepotřebuju. Jde mi o to, abych nemusel všude zadávat svoji kreditku. Minule mi z ní někdo vyndal 110 000,- na letenku do Peru :-) Prostě teda něco jako paypal.

Mají webový portál, kam se přihlásíte a vidíte platby do karty a kartou.

Podstatná omezení:

  • horní limit na jedno dobití přes internet je 1500,-
  • horní limit na jedno dobití obecně je 10 000,- (takže asi přes Sazku a převodem) za den, to musím ještě vyzkoušet
  • převod z banky se přičte až za 3 dny
  • jednotlivá platba může být max 10 000,- Kč
  • zdá se, že i maximální zůstatek na kartě je jenom 10 000,- Kč
  • dá se to údajně zvýšit až na 50 000,- ale musíte telefonem nahlásit, jak se jmenujete. I když teď se zrovna dívám na webu na limity a je tam rovnou 50 000,-. Tak uvidíme.
  • placení je zadarmo, ale dobití (a to i převodem z banky) je za 25,- což znamená, že dobíjet to z karty přes internet je drahé

Zážitky:

  • v pohodě jsem zaplatil na americkém webu 50 USD při zadání čísla a CVV bez nutnosti potvrdit to SMSkou
  • klesly mi peníze pod 300,- a přišla mi zadarmo SMS o tom, že tam mám málo peněz
  • myslel jsem, že ta karta má taky sama 3D Secure, ale zaplatil jsem právě na českém webu, kde to normálně moje kreditní karta vyžaduje, ale tahle to nechtěla
  • historii obou plateb vidím okamžitě na webu, pěkné
  • do jejich webu se přihlašujete jenom heslem, ale nedá se od tam nic odeslat, takže jenom přehled plateb. pěkné.

Tak uvidíme, jak se to bude dále vyvíjet. V podstatě bych to viděl jako dobrou kartu na neznámé weby, kde se zadávají údaje do toho webu a ne do nějakého rozumného platebního portálu.

1 - 14Next
>
 

 Rychlovky lepší než tvítr

 
20.5.2015 8:08

Jůlin překladový slovník: ďáďa - Honzík, mamn - maminka, tata - fotr, papn - papat, kakn - kakat. Ukazuje se, že je to celkem dostatečná slovní zásoba.

18.5.2015 15:55

dneska super publikum na #TechEdDevCon! dekuju!

 

18.5.2015 7:20
Dneska zas slunce a TechEd, nemuze byt nic lepsiho!
17.5.2015 22:06

panebože, ten nový build Windows Server 2016 neobsahuje nabídku Start? Ježiš!

 

17.5.2015 18:35
Slunko a sestiletel chlapecek na ulici zpiva ceskou hymnu. Kraasa
14.5.2015 10:56
Konference TechEd 2015 je narvaná k prasknutí! To bude něco! Už se nemůžu dočkat.
29.4.2015 6:07
MS planuje tarif pro duchodce. Azure Geront Plan. VM jenom s jednim CPU 300MHz, guest OS WinXP a Office365 ve skinu Outlook 97.
28.4.2015 16:22
diky VasekB za seznam :-) http://en.wikipedia.org/wiki/List_of_fictional_Microsoft_companies
17.4.2015 11:49
hustěéé, nějaký spammer dokázal prorazit moji "ochranu" s číslem 2 při komentování u mě na webu.
17.4.2015 7:37
Ostravaka nemusim ale dnesni song o treninku u ruzicky - se smeju jeste ted
16.4.2015 7:45
TechEd 2015 se nezadržitelně blíží. Už jenom měsíc do mé milované jarní konference. Nevím proč, ale ta atmosféra je prostě úžasná! https://www.teched.cz
9.4.2015 17:21
Certifikační zkoušky MCP vyžadují po několika letech recertifikaci. Odteď nemusíte jít znovu na zkoušku, stačí projí (jen) několik (mnoho) MVA kurzů.
8.4.2015 11:47
příští týden mám WUG Bratislava - PowerShell pro pokročilé. Tak doražte! http://www.wug.sk/?name=events&e=179
7.4.2015 20:57
teamviewer? neexistuje čistá verze "client". všechno si to automaticky zapíná vzdálený přístup, který nelze vypnout. tomu říkám bezpečnost.
4.4.2015 15:06
Kostkovy cukr - nejvhodnejsi bomboniera pro tchyni
1.4.2015 16:25
Congratulations 2015 Microsoft MVP!
28.3.2015 19:22
No proc? Vsichni turci, kosovci, makedoci atd z Nemecka a Rakouska maji pres velikonoce dovcu, tak jedou domu.
28.3.2015 19:22
Luxus trihvezdickovy hotel. Kuracky pokoj. Zadna wifi ani placena. Sprcha dela potopu. Nevim jestli neni lepsi prespat v aute.
28.3.2015 19:22
Prvni report z Belehradu. Spis z cesty. Dalnica zkrz Madarsko narvana  D a A auty. Proc asi?
14.3.2015 23:54
Ja to rikam porad, ze ty antiviry jsou zmagorenci. Vic udalosti na support, nez pozitivnich zasahu: http://m.bbc.com/news/technology-31851125
12.3.2015 16:47
Ja mam clanek na technetu a ani o tom nevim :-) http://blogs.technet.com/b/technetczsk/archive/2015/02/16/architektura-overovani-v-systemech-windows-a-rizika-z-toho-plynouci.aspx
10.3.2015 15:24
hrubus megakrutus: http://www.zive.cz/bleskovky/google-vyvinul-unikatni-experimentalni-virus-vyuziva-fyziku-modulu-ram/sc-4-a-177470/default.aspx
9.3.2015 17:40
zajímavá aktualizace: https://support.microsoft.com/kb/3004375?wa=wsignin1.0 . Zvlášť z pohledu toho, že dřív to logovalo jenom PowerShell.exe a nebyly k tomu parametry :-)
4.3.2015 8:20
Ctyri sojky na jednom strome
3.3.2015 13:42
zajímavé postřehy ohledně bezpečnosti Apple: http://www.root.cz/clanky/postrehy-z-bezpecnosti-podvodne-e-maily-este-nedali-posledne-slovo/