Skip to Content

IT nieuczesane.

Excel zamiast CSV

Windows_PowerShell_iconpliki CSV są u mnie w powszechnym użyciu. łatwe w obsłudze, nie wymagają żadnych dodatków, wystarczy podstawowa wersja PS nawet w starej wersji i można generować raporty, łatwy export z excel pozwala to tworzenie pliqw wsadowych z danych z innych działów. wygodnie.

czasem jednak fajnie byłoby ominąć konieczność przejścia xlsx -> csv ->xlsx i wykonać jakieś operacje bezpośrednio. można w tym celu wykorzystać obiekt DCOM. jest sporo doqmentów, opisów – może nie jest to super trywialne i trzeba się przegryźć przez dały model DOM, ale do przeżycia. no i ma podstawową wadę – wymaga zainstalowanego MSExcel na komputerze, na którym wykonuje się operację. na stacji roboczej to zazwyczaj nie problem. na serwerze na odwrót.

Microsoft_Excel_2013_logo.svgrozwiązaniem jest wykorzystanie otwartej biblioteki EPPlus dostępnej na codeplex. nie eliminuje to konieczności znajomości DOM – nadal jest to tylko biblioteka, która pozwala na otwarcie pliq.

jest też gotowy moduł PS, który pozwala wykorzystać ją bez znajomości budowy plików excel. ma oczywiście poważne ograniczenia, jednak implementuje podstawowe operacje, wystarczające do codziennego skryptowania. są nawet funkcje, które wstawiają do arkusza wykresy a więc bardzo dobra opcja dla skryptów raportujących – w pełni zautomatyzowany skrypt, działający na serwerze, bez konieczności instalacji Office, wysyłający raporty xlsx.

w PS5.o można moduł doinstalować bezpośrednio z galerii PS poleceniem

można też go zassać z GitHuba ręcznie, dla starszych wersji.

na blogu scripting guy znajdziecie bogatszy opis zaopatrzony w kilka przykładów.

eN.

 

 

Future Visions

future_visions_machine_learning_webjaka będzie przyszłość? futuryzm to nie tylko fajna zabawa, ale bardzo realny projekt socjologiczny. wynalazki definiują całe społeczeństwa, to czym stanie się ‚człowiek’, czy przetrwa i w jakiej formie. oczywiście, jest to przeważnie spojrzenie przez pryzmat wynalazków a nie sytuacji geopolitycznej, niemniej warto zawczasu podnieść pewne problemy do dysqsji społecznej tak, aby przygotować grunt pod nowe.

Microsoft zainicjował bardzo ciekawy projekt – 9 pisarzy science fiction spotkało się z naukowcami Microsoft Research Labs, gdzie mieli okazję zobaczyć nad jakimi ideami obecnie pracują. to z kolei zostało inspiracją do stworzenia opowiadań, efektem czego jest ‚ Future Visions. Original Science Fiction Inspired by Microsoft‚, które można nabyć bezpłatnie.

jeszcze nie czytałem bo… pomimo zapewnienia ‚[…]is available to anyone as a free download’ – nie każdy korzysta z kindle czy innych wynalazków, a zwykłego PDF niestety nie ma. same pliki są oczywiście szyfrowane DRM. trochę nie rozumiem idei ‚udostępniania za darmo’ w szyfrowanej postaci przez wybranych dystrybutorów…

jak już przeczytam, nie omieszkam wrzucić jakiejś krótkiej recki (:

eN.

Obronić się przed MiTM

Minęło wiele lat od kiedy napisałem tu ostatni post a do tego temat na (re)debiut już nie jest gorący. Chociaż z drugiej strony nie zdążył jeszcze wystygnąć i w każdej chwili może ponownie wybuchnąć. Ale do rzeczy. Dziesięć miesięcy temu okazało się, że przez pół roku Lenovo raczyło swoich użytkowników certyfikatami umożliwiającymi ataki MiTM (https://www.us-cert.gov/ncas/alerts/TA15-051A). Wiadomo, generalne oburzenie, Chińczycy nas śledzą, na pewno to sprawa służb, teorie spiskowe  i w ogóle koniec świata. Szczerze mówiąc temat spłynął po mnie jak po kaczce, sprawdziłem swój tablet (kupiony w przypływie weny wracając z baru po spotkaniu świąteczno noworoczny) i zapomniałem o temacie. Potem gdzieś pojawił się problem z Dell System Detect i zdalnym wywołaniem kodu, który został załatany przed opublikowaniem dziury (http://tomforb.es/dell-system-detect-rce-vulnerability). To ruszyło mnie trochę bardziej, sprawdzanie kto ma zainstalowane oprogramowanie i usunięcie starych wersji okazało się nie być trzema kliknięciami ale koniec końców temat załatwiony i systemy załatane w kilka godzin.

Niby dwie z pozoru niepowiązane rzeczy a jednak ostatnio okazało się, że niektórzy wolą się uczyć na własnych błędach zamiast na cudzych i Dell obdarzył nas kolejną serią serią wpadek (http://joenord.blogspot.in/2015/11/new-dell-computer-comes-with-edellroot.html,http://www.kb.cert.org/vuls/id/925497) instalując razem ze swoim oprogramowaniem certyfikaty w Trusted Root razem z ich kluczami prywatnymi. Do tej pory jest jeszcze prawie ok. Oprogramowanie potrzebuje coś samo podpisać żeby system się nie burzył przy instalacji, certyfikat jest oznaczony jako nieeskportowalny. Nie jest najgorzej, w końcu to narzędzie systemowe a nie aplikacja pokazujące  reklamy jak w przypadku Lenovo i jesteśmy zadowoleni dopóki nie zauważymy, że nasz kolega ma ten sam certyfikat a ktoś nam powie, że klucz prywatny można wyeksportować na przykład za pomocą mimikatz.

W głowie zaczynają układać się klocki pokazujące bardzo prosty scenariusz ataku:

  1. Eksportujemy certyfikat (patrz link powyżej)
  2. Stawiamy darmowe WiFi z SSID Starbunio i idziemy w pobliże kawiarni
  3. Czekamy na kogoś z laptopem Della kto podłączy się do naszego WiFi i otworzy stronę, którą warto przechwycić
  4. Zmieniamy SSID i miejsce bo w naszym pierwotnym celu są same błyszczące Maci
  5. Bingo, złapaliśmy klienta otwierającego stronę banku. Dla niego wszystko wygląda w porządku, jest https, jest zielona kłódeczka a przeglądarka nie ma żadnych podejrzeń. Dopiero jak gość będzie bardzo dociekliwy to okaże się, że certyfikat uwierzytelniający bank wystawił Dell a nie Verisign. My sobie po drodze cały ruch odszyfrowujemy, podmieniamy numery kont (bo kto to sprawdza w smssach) i jesteśmy szczęśliwi.

Problem pojawia się kiedy zdamy sobie sprawę, że nie tylko my możemy tak zrobić a nasi użytkownicy na pewno nie sprawdzają za każdym razem kto wystawił certyfikat stronie i możemy się założyć, że kwestią czasu jest kiedy wypłyną dane z naszej firmy albo ktoś dostanie karnego na Facebook’u. A co jeśli nie tylko Dell i Lenovo mają problem z certyfikatami? Będziemy czekać na białe kapelusze aż opublikują artykuły i łatać za każdym razem licząc na to, że czarne kapelusze nie wkroczyły jeszcze do akcji? A może pójdziemy o krok dalej i będziemy bardziej proaktywni sprawdzając czy mamy jakiekolwiek podejrzane certyfikaty na naszych komputerach?

Teoria mówi, że żaden certyfikat znajdujący się w Trusted Root Certification Authorities nie powinien mieć klucza prywatnego. Gdzieś daleko od nas jest CA a my jemu ufamy ponieważ znamy klucz publiczny CA pasujący do klucza prywatnego używanego do podpisywania certyfikatów. Tyle teorii, praktyka okazuje się być trochę bardziej brutalna ale o tym później.

Kiedy mamy problem z pomocą przychodzi korporacyjna nowomowa i nagle problem staje się on wyzwaniem, a kto nie lubi wyzwań? Do tego jeszcze można zaprzęgnąć lubianego PowerShell i System Center lubiane … inaczej ;)

Zaczynamy od kawałka banalnego kodu:

Który przeleci nam po wszystkich dostępnych certificates stores wyłączając z tego:

  • My – certyfikaty użytkownika/komputera
  • Remote Desktop – to chyba nie wymaga tłumaczenia
  • SMS – certyfikaty używane przez klienta SCCM

w tym kroku można się pokusić jeszcze o wyłączenie innych rzeczy (np. certyfikatów klienta SCOM) albo zamianę

na

żeby zaglądać tylko do Trusted Roots. Na razie trzymajmy się pierwszej wersji żeby zobaczyć co się w ogóle dzieje.

 

Jak już wiemy jakie mamy Certificates Stores to warto do nich zajrzeć i zobaczyć jakie mamy certyfikaty z kluczami prywatnymi

żeby uniknąć szumu wywalamy:

  • certyfikat Fiddlera – jego celem jest robienie MiTM i osoby mające go na komputerach wiedzą co robią
  • certyfikat zawierający z temacie nazwę hosta – tak to ciągle jest niebezpieczne ale wiemy, że ten certyfikat mamy tylko my i ewentualnie ktoś kto go nam wygenerował a nie cały internet. Takie świństwa podrzuca na przykład Skype ze skonfigurowanym Click to call

Reszta to proste działania mające na celu sprawdzenia czy mamy jakiekolwiek podejrzane certyfikaty i podanie ich listę lub potwierdzenie, że komputer jest ok.

 

Kiedy mamy już PowerShell to warto byłoby uruchomić go na wszystkich komputerach i sprawdzić kto ma coś podejrzanego na swojej maszynie. Fajnie byłoby też aby sprawdzanie odbywało się cyklicznie i informowało nas kiedy jest coś nie tak. Tutaj przydaje się SCCM i Compliance Settings.

Tworzymy Configuration Item uruchamiające skrypt i sprawdzające co jest na wyjściu

Configuration item

2015-12-08_21-47-13

Compliance Rules

2015-12-08_21-47-35

Compliance Rule

Potem robimy Configuration Baseline, dodajemy do niego nasz Configuration Item i robimy Deploy na kolekcje użytkowników oraz na kolekcje komputerów (odpowiednio All Users i All Systems). Ostatnie może się wydać trochę dziwne ale jest potrzebne żeby sprawdzić zarówno co mają użytkownicy jak i konto local system. Configuration baseline uruchomiony w kontekście systemu (Deploy na kolekcję komputerów) nie może zajrzeć do certyfikatów użytkowników bo te są trzymane w profilach*, a użytkownicy nie mogą zobaczyć jakie certyfikaty ma konto local system, za to zarówno użytkownik jak i local system mogą sprawdzić zawartość Certificate Store: Local Machine.

*-to nie jest do końca prawda bo można podmontować Hive i dekodować certyfikaty ale są na to prostsze sposoby

Jakby ktoś się pokusił dodatkowo o Remediation script żeby usuwać podejrzane certyfikaty to warto pamiętać, że Local System będzie mógł usuwać certyfikaty zarówno swoje jak o Local Machine a użytkownik będzie mógł usuwać wyłącznie swoje.

Na koniec pozostaje skonfigurowanie alertów, wysyłanie ich do SCOM i workflow do obsługi zdarzeń ale to już temat na osobny wpis.

 

wyciąganie notatek z kindle

800px-Mucha-jobdziś znów gościnnie Kacper ze skryptem w służbie codzienności. pomysły zastosowania PS nie tylko do zadań administracyjnych, a również w zwykłych domowych warunkach, są mocno inspirujące. ponieważ wpisy dotyczą wyrażeń regularnych, sugeruję zapoznanie się z podstawami – np. na stronie regular-expressions.

dziś skrypt automatyzujący wyciąganie ‚clippingów’ z kindle… oddaję głos Kacprowi:

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Od kiedy posiadam Kindle’a kupiłem tylko jedną książkę w wersji papierowej. Wśród wielu zalet Kindle ukrywa się jedna, która w szczególności przypadła mi do gustu. Nazywa się ona – My Clippings.txt. Czytniki Amazonu przechowują w tym pliku wszystkie notatki czy zaznaczenia związane z czytanymi książkami. Przykładowe wpisy w tym pliku wyglądają tak:

Jak widać, mamy tu do czynienia z pewnym schematem, a to daje nam możliwość przekształcenia tych danych na inny format. Zazwyczaj kiedy czytam książkę pierwszy raz, robię dużo zaznaczeń, żeby potem mieć możliwość przypomnienia sobie tych kwestii, które mnie najbardziej interesowały. Można oczywiście przeglądać sobie zawartość My Clippings.txt w celu odświeżenia pamięci, jednak Kindle wpisuje tam wszystko w sposób chronologiczny. Jeśli więc czytam w tym samym czasie dwie książki, to i zaznaczenia będą się przeplatały. Aby ułatwić sobie życie postanowiłem napisać skrypt, który przetworzy dane z pliku My Clippings.txt tak, żeby można było np. filtrować z której książki zaznaczenia chcemy wyświetlić.:

Jak widać skrypt nie jest skomplikowany, a najciekawsze fragmenty to regexy, które pobierają określony typ danych.

Na samym początku wstawiam średnik pomiędzy samą zawartość wpisu, a metadane. Prawdopodobnie nie jest to konieczne, ale znacznie mi ułatwiło tworzenie regexa w sekcji oznaczonej komentarzem „Extract clipping content”. Potem za pomocą wyrażenia „- (.*?) ” wydobywany jest typ wpisu. Zastosowanie nawiasów tworzy tzw. capturing groups, dzięki którym zwracana jest sama nazwa bez otaczających znaków. Jest to alternatywna wersja zapisu [Regex]::Matches($Clipping, $Pattern), który omawiałem w poprzednim wpisie.

Przy zapisywaniu tytułu książki do zmiennej wykorzystuję wyrażenie „.*(?=- )”. Ten regex zawiera tzw. positive lookahead, który zwraca wszystko od początku stringa aż do wystąpienia sekwencji znaków „- „, nie uwzględniając samej sekwencji (za to jest odpowiedzialny positive lookahead właśnie).

Na sam koniec, ponownie korzystając z capturing groups, pobieram wszystko co jest za znakiem średnika i zapisuję w zmiennej ClippingContent. Dalej jest już tylko stworzenie obiektu przy pomocy hashtable’a i dodanie go do tablicy Clippings, która jest zwracana przez skrypt.

Kacper

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

76. spotkanie WGUiSW

big_wguiswpierwszy grudnia, pierwszy wtorek, ostatni WGUiSW 2o15 … na zakończenie aż 4 prezentacje i szlachetna paczka.

pełna agenda spotkania

eN.

uprawnienia AD

private-property-rightsstruktura AD to żywy organizm, który ewoluuje, ulegając ciągłym modyfikacją – nowi użytkownicy, wycofanie kont… ale również nowi administratorzy i delegacje do poszczególnych gałęzi etc. jak każde środowisko – i to ulega zaśmieceniu. jak każdy bałagan – może to stanowić osłabienie bezpieczeństwa, głównie z powodu jakiś zapomnianych uprawnień. ktoś-gdzieś-kiedyś nadał uprawnienia kontu serwisowemu lub grupie do modyfikacji obiektów, czas leci, a AD nie daje możliwości łatwej weryfikacji nadanych uprawnień. przy złożonej strukturze drzewa, często zostają dziury w postaci niekontrolowanego dostępu na podwyższonych przywilejach.

jak zatem to szybko odczytać? SOA#1 czyli – PowerShellem. podstawowy skrypt jest dość trywialny, ponieważ PS dysponuje możliwością łatwego odpytania się o jednostki organizacyjne oraz odczytanie uprawnień. co więcej – cały kod można uruchomić jako najzwyklejszy user [oczywiście w standardowej konfiguracji]. jedyne, co trzeba na stacji doinstalować to moduł ActiveDirectory [RSAT]. cały problem natomiast, sprowadza się do wyszukania uprawnień, które nie są dziedziczone tylko nadane niezależnie – bo na tym przecież polega delegacja:

to oczywiście zarys, skrypt napisany ‚na kolanie’. diabeł leży w szczegółach, więc aby przygotować całe narzędzie trochę walki będzie. a ten diabeł to głównie filtrowanie wyników:

  • w AD jest spora grupa uprawnień niedziedziczonych, nadawanych podczas promocji DC – nazwijmy je ‚standardowymi’. mamy więc dwa wyjścia – albo sobie obrobić plik po wypluciu, albo napisać kawałek kodu, który te uprawnienia przefiltruje. może nie jest to super-trudne, ale przyjemne do napisania na pewno też nie jest.
  • z takich ‚standardowych uprawnień’, po testach w kilq domenach zauważyłem, że powtarzają się:

  • grupy, których SIDy się tutaj nie rozwiązują to Account Operators i Print Operators. warto zwrócić, że to SIDy lokalne a nie domenowe.
  • w niektórych domenach, potrafił te SIDy rozwiązać O_o
  • output powinien być w postaci ładnego obiektu, żeby wyexportować do CSV do dalszej prezentacji i obróbki.
  • get-acl nie ma opcji NIE-rozwiązywania SIDów na nazwy więc trzeba je z powrotem sprawdzać przy porównaniach /:

eN.

 

 

 

jak przeszukiwać Internet przy pomocy PowerShell (;

800px-Mucha-jobdzisiejszy wpis jest przygotowany gościnnie przez Kacpra. Kacper jest specjalistą SCCM i szeroko rozumianej automatyzacji/orkiestracji, co tłumaczy odwołanie się do metod zakrawających na developerkę, gdy UI w postaci formatek dostarczanych przez dostawcę nie wystarczyło. jest to też bardzo ciekawy przykład tego, jak uniwersalny jest PS…

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Nie znasz dnia, ani godziny kiedy może się przydać PowerShell. Szukałem ostatnio lodówki z kostkarką i trafiłem w ten sposób na stronę w http://www.liebherr.aged.com.pl/. Niestety twórca filtra produktów nie przewidzał, że ktoś mógłby szukać lodówki ze wspomnianą kostkarką. Mogłem oczywiście znaleźć sobie jakąś inną stronę czy sklep internetowy. Jednak mój wewnętrzny nerd został podrażniony, nie było już odwrotu. :) Postanowiłem zaprząc PowerShella do tego zadania, jak to mam w zwyczaju. Trzeba było napisać małego crawlera, który znajdzie to czego mi się nie chciało samemu szukać. Efektem postanowienia jest poniższy skrypt:

O dwóch rzeczach należy wspomnieć. Cmdlet Invoke-WebRequest i wykomentowanej linii na końcu. Invoke-WebRequest wywołuje uczucia ambiwalentne. Z jednej strony ma kilka fajnych funkcjonalności jak np. użyta właściwość Links zwracanego obiektu. Zawiera ona tablicę linków które znajdują się na stronie, więc nie trzeba się bawić w regexy i szukać ich samodzielnie. Jest też kilka innych ciekawych właściwości jak np. Images czy InputFields. niestety Invoke-WebRequest ma też jedną wadę, która może być w pewnych sytuacja dosyć uciążliwa. Mianowicie dosyć słabo sobie radzi z kodowaniem UTF8 bez BOMa. A w zasadzie to w ogóle sobie nie radzi i zwraca po prostu krzaki jeśli na stronie są np. polskie znaki diaktryczne. I niestety nic się nie da z tym zrobić w zasadzie, a przynajmniej mi się nie udało. Jako obejście można skorzystać z klas .NET Net.WebRequest i Net.WebResponse, ale tracimy wtedy opisane wcześniej zalety Invoke-WebRequesta.

Natomiast wykomentowana linia to pierwsza wersja pętli, która znajduje się bezpośrednio nad nią. Korzystając z Select-Stringa nie da się pobrać zawartości znacznika title, bez samego znacznika. Ponownie trzeba się odwołać do klasy .NET Regex, która zwraca grupy dopasowań, a dzięki nim mamy także dostęp do samej zawartości znacznika.

Kacper.

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

Praca po nocy

Dziś wpis o niskim współczynniku zawartości power shella i twardej administracji, ale mam nadzieje, że nie mniej pomocny.
Po nocy przed monitorem siedzi każdy z nas, może nie z taką częstotliwością jak na studiach #goodoldtimes, ale przynajmniej okna serwisowe wypadają gdy słońce już dawno zaszło. Kiedyś, pisząc kolejne projekty na zaliczenie zwracałem uwagę na zbyt jasne oświetlenie monitora, szczególnie tła kartki w Wordzie. W nowych Windowsach, (tak gdzieś od 7) nie mogłem znaleźć tego ustawienia, a tu z pomocą przychodzi dedykowany program F.lux.
https://justgetflux.com/
Narzędzie automatycznie dostosowuje temperaturę kolorów monitora po zachodzie słońca. Sprawdziłem wczoraj w nocy – działa perfekcyjnie. Małe, proste, łatwo w razie czego wyłączyć na chwilę.
Polecam.

Dodatkowo jak już siedzimy po nocy, można zajrzeć na stronę o zdrowym śnie, sygnowaną przez Uniwersytet Harwarda: http://healthysleep.med.harvard.edu/portal/.

UltraWide festival cardboard setup entry

o ile idea samego UltraWide festival nie do końca do mnie przemawia o tyle w ramach tego jest taki śmieszny event: card bard setup entry. polecam pooglądać co też to ludziska nie wymyślą (;

i taki ciekawy secik:

eN.

nowości w PS5 – remote copy

Windows_PowerShell_iconbyło na WGUiSW

IMHO jednym z najważniejszych rozszerzeń, bo przydatnych w codziennej pracy, jakie pojawiły się w PowerShell 5 jest możliwość kopiowania plików via winRM – coś aka SCP. SMB ma swoje wymagania i raczej nie otwiera się portów na zewnątrz dla tego protokołu. winRM pozwala szyfrowanym kanałem przesłać plik uzupełniając możliwości zdalnej administracji.

wymaganiem jest oczywiście, aby po obu stronach był PS5 [WMF5], czyli niestety, jeszcze przez kilka miesięcy raczej rozwiązanie laboratoryjne, ponieważ WMF5 jest cały czas jako production preview. instalowałem testowo na w2k12R2 i w2k8R2 – i na tym drugim, niestety ze skutkiem śmiertelnym dla PS5 [bez paniki, nie debugowałem problemu, ale na pewno ‚don’t do it on production’ jak mawiają rodzice].

plik kopiuje się podając sesję zdalną, a więc najpierw trzeba ją założyć. niestety nie jest obsługiwane kopiowane do wielu sesji na raz ):

obsługiwane jest również kopiowanie Z serwera przy pomocy ‚fromSession’. kopiowane ‚proxy’ czyli podając równocześnie ‚do’ i ‚z’ nie zadziała:

niewątpliwie funkcjonalność, dla której warto będzie na serwerach podnieść wersję WMF, jak już będzie wersja finalna.

eN.