i, co najważniejsze, Call for Pages do numeru piątego jest już otwarty!
W czwartym numerze jest cała masa świetnych artykułów (w tym dwa moje, też świetne, a co) – i standardowo, każdy zajmuje dokładnie jedną stronę. A stron w sumie jest 68.
Lista kategorii z tego numeru (w kolejności alfabetycznej):
Art,
Algorithms,
Artificial Intelligence,
Cryptography,
File Formats,
GameDev,
Hardware,
History,
Networks,
OS Internals,
Operating Systems,
Programming,
Retro,
Reverse Engineering,
and Security/Hacking.
W każdym razie, jeśli chcecie być na bieżąco z Paged Out!, to poniżej jest kilka sposobów, żeby to osiągnać:
Albo można nas śledzić na różnych social media: np. mój serwer Discorda dubluje jako oficjalny serwer Paged Out!, ale można nas też śledzić na X/Twitter, Bluesky, czy Mastodon.
Za 9 dni, tj. 26.11.2024, odbędzie się jedna z najlepszych konferencji cybersec w Polsce – Oh My Hack (stylizowane w tym roku na Oh My H^ck – całkiem fajny pomysł tbh, chyba jeszcze takiego użycia karety nie widziałem). Agenda zapowiada się wyśmienicie – będzie m.in. cała masa "klasyków polskich konferencji", tj. znanych i lubianych speakerów jak Łukasz Bromirski, Michał Bentkowski, Mateusz Chrobok, czy Jakub Mrugalski – żeby wymienić tylko kilku. Bo jest ich więcej, ale chyba musiałbym całą agendę przepisać, więc zamiast tego... link do agendy: https://omhconf.pl/#agenda
Jeśli myślicie, żeby się wybrać, to kod, który dostałem od orgów, nadal działa: 15-OD-GYNA
Rok temu na tej konferencji było sporo prelekcji członków Dragon Sector – m.in. pamiętna prelekcja Redforda, MrTicka, oraz q3ka pt. „Heavyweight Hardware Hacking”, która w zasadzie rozpoczęła publiczną dyskusję o jednej z najważniejszych spraw związanych z inżynieria wsteczną w Polsce. I w tym roku na OMH będą kolejne prelekcje osób z Dragon Sector, w tym prawnika reprezentującego DS w sprawach związanych z pociągami:
W przyszłym tygodniu zaczyna się pierwsze szkolenie z mojej serii "Pliki i Protokoły Binarne" (rejestracja jest nadal otwarta – serdecznie zapraszam). Poniższy filmik pokazuje w praktyce to, czego można nauczyć się podczas tej serii – tj. zaczynamy od przechwyconego ruchu sieciowego (PCAP/Wireshark), rozgryzamy użyty protokół binarny, a potem go na szybko implementujemy (Python) i ściągamy brakujący plik SECRET.PDF. Miłego oglądania!
Być może niektórzy z Was pamiętają moje kursy z serii ReverseCraft sprzed 15 lat. Serie tę zacząłem jeszcze mieszkając we Wrocławiu i nawet miałem ambicję, żeby rozwinąć to w porządny, kompletny zestaw kursów z inżynierii wstecznej i asemblera. Życie jednak miało swoje plany i niedługo później byłem zajęty przeprowadzką do Zurychu i rozpoczęciem pracy w Google. Przez lata co jakiś czas wracałem do publikowania materiałów dydaktycznych o RE – był mój kurs asemblera na YouTube (ten używający painta jako tablicy), książka "Praktyczna Inżynieria Wsteczna", trochę prelekcji, wpisów i artykułów, i sporo livestreamów. Przez cały ten czas obiecywałem sobie, że jeszcze wrócę do mojego coraz to starszego pomysłu.
I wiecie co? Wygląda na to, nadszedł czas, żeby coś robić w tym kierunku (choć w zasadzie coś tam w tle już się działo nawet rok temu).
W skrócie: zebrałem masę różnych trików, ciekawostek, sztuczek, kruczków i szczególików o plikach z perspektywy systemu operacyjnego / użytkownika / admina / tudzież hackera, i razem z sekurak.pl / Securitum robimy o tym webinar. Wstęp w systemie "zapłać ile chcesz (w tym 0 PLN)", ale trzeba się zarejestrować. Na oko potrwa 2 godziny.
A teraz trochę szczegółów:
Kiedy: 21. sierpnia 2024
Gdzie: online
Za ile: zapłać ile chcesz, w tym 0 PLN (bo podobno za darmo to dobra cena).
Jest też opcja z dodatkowymi materiałami i certyfikatem uczestnictwa za około 48 PLN.
i, co najważniejsze, Call for Pages do numeru piątego jest już otwarty!
W czwartym numerze jest cała masa świetnych artykułów – i standardowo, każdy zajmuje dokładnie jedną stronę. A stron w sumie jest 68. Z nowych rzeczy w końcu mamy coś, co chciałem ujrzeć w Paged Out! od początku – galerię grafik (digital art / pixel art)! Są tam też dwa moje artykuły (jeden napisany wspólnie z Łukaszem Olejnikiem).
Lista kategorii z tego numeru (w kolejności alfabetycznej):
Art,
Artificial Intelligence,
Assembly,
Cryptography,
Demoscene,
File Formats,
Hardware,
History,
Programming,
Retro,
Reverse Engineering,
oraz Security/Hacking.
W każdym razie, jeśli chcecie być na bieżąco z Paged Out!, to poniżej jest kilka sposobów, żeby to osiągnać:
Albo można nas śledzić na różnych social media: np. mój serwer Discorda dubluje jako oficjalny serwer Paged Out!, ale można nas też śledzić na X/Twitter, Bluesky, czy Mastodon.
Niestety, z powodów natury medycznej w najbliższej rodzinie, mimo zapowiedzi i chęci nie uda mi się przylecieć na poniedziałkowy/wtorkowy CONFidence'24, za co bardzo chciałbym wszystkich przeprosić. Od razu dla uspokojenia dodam, że nic złego się nie stało – po prostu bezpieczniej, żebym przez kilka najbliższy dni był pod ręką na miejscu.
Co za tym idzie: - Paweł Maziarz poprowadzi naszą wspólną prelekcję sam – sytuacja tutaj jest o tyle szczęśliwa, że Paweł jest absolutnie świetnym prelegentem i ma masę swojego materiału w prelekcji (choć jeszcze kilka slajdów ode mnie też dostanie). Dodam od razu, że rozważaliśmy model hybrydowy (część Paweł na sali, część ja zdalnie), ale ostatecznie obawialiśmy się, że to po prostu by dobrze nie wyszło. - Nie uda mi się podpisać książek – chciałbym tutaj szczególnie przeprosić osoby, które w ciągu ostatnich kilku miesięcy dopytywały się gdzie można mnie złapać do podpisania książek, i którym napisałem, że będę na CONFidence. Będę w Krakowie jeszcze we wrześniu, ale można do mnie w razie czego zawsze napisać (najlepiej na discordzie) i dopytać o nadchodzące okazje do otrzymania podpisu. - I nie uda mi się też przybić przysłowiowej "piątki" z Wami wszystkimi, z którymi chciałem się zobaczyć i porozmawiać :( - Chciałbym również podziękować Pawłowi oraz Monice z PROIDEA za wyrozumiałość i zrozumienie – jako prelegent i organizator konferencji wiem, że wypadający nagle prelegent bardzo miesza w planach. - Tym samym z Pawłem rozważamy zrobienie pełnej wersji prelekcji kiedyś online – tak, żeby jednak się odbyła również w zaplanowanej pierwotnie formie. Jak tylko coś będzie ustalone to damy znać. - Na osłodzenie zdradzę, że albo jeszcze podczas CONFidence, albo jakoś chwilę po, wyjdzie PO!#4.
Niezależnie od powyższego, chciałbym wszystkim życzyć udanego CONFidence – trzymam kciuki, żeby była to najlepsza edycja ever! :)
W zeszłym roku napisałem do magazynu Programista krótki artykuł o moich drobnych eksperymentach z generowaniem kodu i poprawnością tego kodu. Za dużo o tym artykule pisał nie będę, bo dzisiaj został opublikowany do pobrania za darmo – więc można po prostu go przeczytać ;).
Wczoraj, oprócz premiery trzeciego numeru Paged Out!, na sieć wrzuciłem też wywiad z naszym zespołem biorącym udział w konkursach związanych z „hakowaniem satelitów”, tj. Poland Can Into Space. Podczas ponad półtoragodzinnego spotkania rozmawiamy zarówno o tegorocznej edycji konkursu, tj. HACK-A-SAT 4, jak i trochę o zeszłorocznym HACK-A-SAT 3. Zapraszam!
Po czterech długich latach w końcu mamy to – trzeci numer magazynu Paged Out!
Download:pagedout.institute, w sekcji Download Issues. Za darmo. Miłej lektury!
Jeśli zastanawiacie się, czym jest Paged Out!, to jest to eksperymentalny magazyn o IT/elektronice, gdzie każdy artykuł zajmuje dokładnie jedną stronę. W tym numerze mamy ich 48 50, porozrzucane po kilku kategoriach:
Programming,
Networks,
Reverse Engineering,
Security/Hacking,
Cryptography,
Hardware,
Artificial Intelligence,
File Formats,
Art,
i Sysadmin stuff (przydałaby się lepsza nazwa)!
W tym numerze trochę brakuje Retro (mamy coś o PS4, ale to chyba jeszcze nie jest retro; jest też SuperH!), Demoscene, Radio, i kilku innych tematów. Więc jesli chcecie coś napisać na któryś z tych lub innych tematów, to mamy dobre wieści! Call For Articles do numeru czwartego jest już otwarte! Szczegóły znajdziecie na tej stronie. Bardzo zachęcamy do napisania czegoś do Paged Out!, szczególnie, że artykułu na jedną stronę pisze się dość szybko :)
Przez ostatnie kilka lat wydarzyło się wiele w kwestii PO! i jeśli jesteście zainteresowani rzutem oka za kulisy, zachęcam do przeczytania wstępniaka w numerze trzecim, a także do zajrzenia na blog Paged Out! Institute.
UPDATE: Krótki dodatek, bo widzę, że ktoś faktycznie zainteresował się tym postem, ale jest dużo zamieszania co do dwóch kwestii: definicji słowa "hacker" oraz czym jest "Dragon Sector".
Po pierwsze, jest chyba 6 czy 7 definicji słowa "hacker":
hacker – osoba, która pisze kod z "hackami", tj. taki, który niby działa, ale nie czyta się go najlepiej (przykład),
hacker – osoba, która posiada głęboką wiedzę w tematyce informatyki i/lub elektroniki, i lubi wiedzieć jak rzeczy działają (patrz: 1, 2, ale też 3),
hacker – osoba, zajmująca się bezpieczeństwem komputerowym; także: osoba, która posiada wiedzę o wykorzystywaniu podatności i przełamywaniu zabezpieczeń; istotne: jest to określenie neutralne (patrz: 1, 2),
hacker – synonim cyberprzestępcy, co btw jest niepoprawną, ale niestety potocznie używaną definicją (patrz 1, 2),
hacker – tak podobno mówi się na taksówkarzy w niektórych rejonach US (patrz: 1),
hacker – podobno również tak się mówi na niewprawnych golfiarzy.
Zarówno ja, jak i inne osoby z Dragon Sector, jesteśmy hackerami w rozumieniu punktów 2 oraz 3, a czasem także 1 (tak tak, mam na myśli szczególnie Ciebie, widziałem Twój kod). W moim przypadku również ostatnia definicja by pasowała. W szczególności NIE jesteśmy hakerami w rozumieniu definicji 4.
Po drugie, czym jest "Dragon Sector", o którym media piszą "grupa hackerów". Otóż Dragon Sector jest... drużyną e-sportową, która bierze udział w zawodach e-sportowych zwanych Security Capture The Flag (w skrócie: CTF), które sprawdzają umiejętności techniczne uczestników w hackingu zgodnie z definicjami 2 oraz 3 (btw pod pewnymi względami zadania na topowych CTFach są dużo bardziej skomplikowane niż to co Redford/mrtick prezentowali na Oh My H@ck). Jest to bardzo popularna rzecz w środowiskach związanych z cyberbezpieczeństwem i odnośniki do CTFów pojawiają się m.in. w tym rozporządzeniu Rady Ministrów (ctrl+f CTF) w sekcji o wymogach posiadania specjalistycznej wiedzy w zakresie cyberbezpieczeństwa. Dragon Sector jest drużyną, która zajmowała trzy razy pierwsze miejsce w rocznym rankingu światowym (patrz np. wpis na stronie Biura Bezpieczeństwa Narodowego).
Tym samym Dragon Sector nie jest firmą/spółką świadczącą usługi z zakresu cyberbezpieczeństwa. Pracujemy w różnych miejscach (np. ja 12 lat przesiedziałem w Google), niektórzy z nas mają własne firmy. Ale łączy nas to, że jesteśmy hakerami zgodnie z definicją 2 i 3 powyżej, lubimy komputery, lubimy wyzwania, i interesuje nas, jak różne rzeczy działają od środka.
Wczoraj (tj. 5 grudnia 2023) na konferencji Oh My H@ck widziałem zaprezentowany chyba najciekawszy case-study ze stosowanej inżynierii wstecznej w tym roku (jeśli nie w tej dekadzie). Mówię oczywiście o prelekcji „Heavyweight Hardware Hacking”, gdzie zaprezentowane zostaly wyniki badań prowadzonych przez Redforda, q3ka, oraz mrticka (PanaKleszcza). W skrócie i uproszczeniu można o nich poczytać m.in. na Z3S lub u q3ka na mastodonie. A dzisiaj na te publikacje oficjalnie odpowiedziała spółka NEWAG (mirror).
W odpowiedzi pojawiło się bardzo ciekawe stwierdzenie na temat technikaliów inżynierii wstecznej, a ponieważ jest to temat, którym zajmuję się od prawie 20 lat, to postanowiłem się do tego odnieść.
Na początek kilka disclaimerów:
O ile wychodzę w poście od cytatu z oświadczenia NEWAGu, to skupiam się na ogólnych technikaliach, a nie na tym konkretnym przypadku i tej konkretnej sprawie.
Full-disclosure: jestem członkiem i założycielem Dragon Sector, natomiast nie pracowałem nad tym konkretnym projektem, więc nie mam praktycznie żadnych dodatkowych informacji poza tym co można znaleźć w Internecie oraz co było wczoraj na prelekcji.
Zacznijmy od cytatu z oficjalnego oświadczenia spółki NEWAG (podkreśliłem jedno kluczowe słowo, które jest trochę bez znaczenia dla tego postu, ale które ładnie nawiązuje do problematyki metadanych; ale to inny temat i nie na dzisiaj):
8. W konsekwencji w dowolnym czasie możliwe było wykonanie tzw. reverse
engineering oprogramowania sterującego (tj. zhakowanie) poprzez
przeniesienie jego kodu dekompilacji, modyfikacji oraz ponowne załadowanie
zmienionego oprogramowania sterującego.
[...]
10. [...] Otóż oczywistym jest, iż nawet najlepszy haker może co najwyżej
próbować poznać treść określonego zapisu cyfrowego. Żaden haker nie jest
natomiast w stanie, na podstawie samego zapis cyfrowego, wskazać kto
konkretnie jest „autorem” określonego zapisu cyfrowego.
00000150 82 86 3e de eb 0c 2f 9c c3 75 07 96 7c de 7d 7a |..>.../..u..|.}z|
00000160 62 eb 7c 1a f1 3b 0f 47 97 9e 78 8f 30 78 72 e0 |b.|..;.G..x.0xr.|
00000170 92 d4 d2 44 02 6e 4e 4f 54 c0 a8 20 b0 94 33 1c |...D.nNOT.. ..3.|
Jeśli zawsze chcieliście nauczyć się posługiwać hexedytorami i sprawnie operować na plikach binarnych, ale jakoś do tego jeszcze nie dotarliście, to mam coś dla Was. W poniedziałek (18 września) i wtorek (19 września) o 20:00 będę prowadzić darmowe szkolenie pt. „Operowanie na Bitach i Bajtach”, które jest praktyczno-teoretycznym wstępem do 4-częsciowej serii szkoleń z plików binarnych. Szkolenie z tego jak sprawnie korzystać z hexedytorów i grzebać w plikach binarnych chodziło mi po głowie od długiego czasu – to moim zdaniem jeden z fajniejszych i bardziej przydatnych skilli w hackingu. Stąd też był to pierwszy temat, który przyszedł mi do głowy jak zacząłem myśleć nad tym od jakiego szkolenia zacząć z HexArcana. O samych szkoleniach piszę trochę więcej poniżej, a póki co garść najważniejszych informacji organizacyjnych:
Wszystkie szkolenia razem w pakiecie (2099 PLN + VAT) hex.sekurak.pl
#1 Operowanie na Bitach i Bajtach (płać ile chcesz, w tym 0 PLN)
18 + 19 września godz. 20:00 – 22:00, 4h szkolenia w sumie Rejestracja i więcej info
#2 Wstęp do plików binarnych i hexedytorów (499 PLN + VAT)
25 + 26 września godz. 9:00 – 13:00, 8h szkolenia w sumie Rejestracja i więcej info
#3 Programowanie Bezpiecznych Parserów (1000 PLN + VAT)
2 + 3 października godz. 9:00 – 13:00, 8h szkolenia w sumie, programowanie wymagane Rejestracja i więcej info
#4 Inżynieria Wsteczna Nieznanych Formatów (1000 PLN + VAT)
9 + 10 października godz. 9:00 – 13:00, 8h szkolenia w sumie, programowanie wymagane Rejestracja i więcej info
P.S. Przez 60 dni będą dostępne również nagrania dla osób zarejestrowanych.
Na każde z powyższych szkoleń można się zarejestrować niezależnie od pozostałych (jeśli posiada się odpowiednią wiedzę wstępną). Początkującym i osobom, które miały niewielką styczność z niskopoziomowymi tematami zalecałbym zacząć od #1 i potem dorzucić #2. Części #3 i #4 będą wymagały umiejętności programistycznych (czego dwa pierwsze szkolenia z serii nie wymagają).
Na majowym Mega Sekurak Hacking Party miałem wystąpienie na żywo właśnie o takim tytule – „Jak wygrywać CTFy” – podczas którego pokazywałem różne sztuczki i kruczki, które podłapałem przez ostatnie 20 lat udziałów w konkursach hackerskich (serio, w pierwszych konkursach tego typu brałem udział koło 2002-2003 roku). Prelekcja została bardzo ciepło przyjęta – dostała 5.0 za poziom merytoryczny, i było sporo komentarzy typu „za mało czasu na prezentację, powinno być go co najmniej dwa razy więcej”. A więc mówicie? Macie! Jutro o 20:00 odbędzie się około 2-godzinna wersja rozszerzona prelekcji, na którą serdecznie zapraszam!
Kilka dni temu rozpoczął się preorder na nową książkę pod redakcją Michała Sajdaka i wydawaną przez wydawnictwo Securitum. Jak można się domyślić po tytule, i co zresztą widać po spisie treści (wrzuciłem pod koniec posta), książka będzie bardzo techniczna i zapowiada się wyśmienicie – masa ciekawych tematów opisanych przez osoby, które na pewno kojarzycie jeśli interesujecie się polską sceną bezpieczeństwa.
Jedynym nietechnicznym rozdziałem jest napisany przeze mnie rozdział otwierający książkę pt. „O etyce w hakingu”. Pozwolę sobię zacytować pierwsze cztery akapity, które dobrze oddają jego cel:
Po nieco ponad 12 latach opuściłem zespół bezpieczeństwa Google, aby odpocząć i zbudować coś swojego. Zapraszam, na mój livestream, gdzie opowiem o tym, co było i co będzie.
Livestream odbędzie się 5 lipca 2023. Nagranie będzie dostępne.
Odbywający się 17 października 2022 Sekurak Mega Hacking Party w zasadzie rozpoczął się dwa dni wcześniej od indywidualnego CTFa. W którego miałem nie grać. Bo miałem robić inne Ważniejsze Rzeczy™. Ale wyszło jak zwykle - i w sumie fajnie, bo CTF okazał się być bardzo sympatyczny.
Poniżej znajdują się rozwiązania zadań, w których udało mi się zdobyć flagę. Rozwiązania są dość skrótowe, ale starałem się mniej więcej wskazać jaką drogą poszedłem.
6 grudnia odbędzie się Mega Sekurak Hacking Party, czyli jednodniowe wydarzenie organizowane przez ekipę od sekurak.pl/securitum.pl z serią 8 prelekcji live i ~8 nagrań puszczanych w trybie "oglądaj razem z prelegentem na czacie" (imo ciekawy pomysł – można prelegentów trochę podpytać o to co się dzieje w danej chwili na nagraniu).
Dodam, że przypadł mi zaszczyt otworzyć konferencję pierwszym wykładem o wczesnej porannej godzinie (9:15). Sama prelekcja ma wdzięczny tytuł „Netgear – CTF w pudełku?!”, i opowiem na niej o błędach znalezionych w firmware niektórych urządzeń Netgeara (raporty z nich można znaleźć po angielskiej stronie mojego bloga), a także o tym jak w ogóle doszło do tego, że zacząłem się zajmować tym tematem, i jak wyglądały same badania od strony procesu/narzędzi (przy czym to są bardziej podstawy – dużo więcej nie było potrzebne).
Poza moją prelekcją na MSHP będzie jeszcze kilka lepszych - poniżej krótki spis.
Moja prelekcja podczas lSHP będzie w zasadzie pierwszą prelekcją w cyklu o mniej lub bardziej pomysłowym tytule „Principle of vast astonishment”. Cykl ten powstał w zasadzie przez przypadek – któregoś pięknego wieczoru podczas analizowania kolejnej rzeczy natknąłem się na coś, co zachowywało się dziwnie i nietypowo, i pomyślałem, że w sumie zrobię z tego kilka slajdów. Kilka dni później doszło kilka kolejnych slajdów o czymś innym, tydzień później jeszcze kilka, i tak dalej. I tak oto okazało się, że w zasadzie mam gotowy materiał na kilka kolejnych lightning talków na losowych konferencjach w ciągu roku. W takiej sytuacji Michał nie musiał mnie za długo przekonywać do opowiedzenia czegoś na piątkowym wydarzeniu ;>
Agenda lSHP znajduje się poniżej, a póki co kilka ważnych linków:
Od zeszłego tygodnia prawie codziennie prowadzę "wirtualne warsztaty dla początkujących z jakości kodu" - w dużym skrócie: analizuje i sugeruje rzeczy do poprawienia / zrobienia inaczej w kodzie, który otrzymuje od widzów. Wczorajszy (#6) odcinek był o dość krótkim i ciekawym kodzie w C++, który między innymi zapisywał ("manualnie") plik BMP. Ponieważ sam nagłówek BMP był tworzony/trzymany bezpośrednio w tablicy bajtów - co nie jest specjalnie czytelne - zasugerowałem użycie struktury. To z kolei spotkało się z zaskoczeniem jednego z widzów (w komentarzach pod wideo) z uwagi na dopełnienie (padding) / wyrównanie pól (alignment). Delikatnie rozbudowaną wersję mojej odpowiedzi zamieszczam poniżej.
Jakiś czas temu dostałem do przejrzenia wstępne tłumaczenie książki "Człowiek vs Komputer" z pytaniem czy polskie wydanie ma szansę na mój patronat (jak widzicie mam opinię dość wybrednego). Jak możecie domyślić się z samego faktu istnienia tego postu, książkę zacząłem czytać, i po kilku rozdziałach odpowiedziałem twierdząco:
Przejrzałem, poczytałem, posprawdzałem trochę źródeł i... świetna książka :) Zdecydowanie kapitalne historie! W dużym skrócie, książka jest zbiorem autentycznych historii w których przez błąd w jakimś oprogramowaniu (lub PPKK*) stało się coś, co miało interesujące konsekwencje w świecie rzeczywistym. Na przykład urzekła mnie historia o mandatach spływających do osoby która miała samochód z tablicą rejestracyjną z napisem "NO PLATE" ("brak tablicy") - czytelnicy tego bloga na pewno domyślą się co zaszło, ale na wszelki wypadek dam podpowiedź: co zrobić, jeśli interfejs policyjny wymaga wypełnienia pola "tablica rejestracyjna", a samochód (który, przykładowo, przekroczył prędkość) takiej nie miał? W samej książce sprawa z tablicami rejestracyjnymi jest pociągnięta jeszcze dalej, ale nie będę spoilerować :). I takich historii jest tam kilkadziesiąt.
Dodam, że sama książka jest nietechniczna, tj. nie trzeba mieć wiedzy o programowaniu/komputerach, żeby się ją fajnie czytało (w przeciwieństwie do moich/j00ru "Potknięć programistycznych").
Miłej lektury!
* Problem Pomiędzy Krzesłem a Komputerem (czyli PEBKAC)
Konkursy o wejściówki na CONFidence 2019 zakończyły się wczoraj w południe, więc czas na opublikowanie zwycięskich prac (bo technicznie ogłoszenie wyników miało miejsce na dzisiejszym livestreamie).
Do tegorocznej edycji CONFidence nie zostało już za dużo czasu (3-4 czerwca), a ja mam jeszcze trzy wejściówki do rozdania. Czas najwyższy na zapowiadany konkurs, a w zasadzie trzy konkursy, każdy o jeden bilet wstępu.
Zanim jednak przejdę do konkursu kilka "przypomnień": - Jeśli nadal chcecie kupić bilet na CONFidence, to najlepiej to zrobić przed 27 maja (wtedy zmienia się cena biletów). - Z tego co mi wiadomo, to biletów już wiele nie zostało, a na kilka dni przed konferencją może ich zupełnie zabraknąć. - Dla przypomnienia, kod rabatowy: GC_20 (20%) - Dla osób w wieku 13-19 lat: Są jeszcze miejsca na CONFidence Class (to osobne wydarzenie, szczegóły na stronie).
Jak część z Was pewnie wie, od pewnego czasu mam zestaw dwóch kanałów IRCowych na irc.freenode.org, na których dyskutujemy sobie na techniczne tematy z moją małą livestreamową społecznością (polski kanał jest dość aktywny non-stop, a angielski w zasadzie tylko podczas livestreamów). W każdym razie ostatnio zorientowałem się, że w zasadzie masa osób korzysta obecnie z Discorda, więc i to postanowiłem założyć.
Krótki post z moim kalendarium konferencyjnym na najbliższe pół roku (za dużo tego nie ma, bo robię sobie rok przerwy od prelekcji znowu):
PL: • (25.02, Kraków) MEGA sekurak hacking party - jeszcze podobno trochę biletów jest, a są dość tanie w porównaniu do sporej liczby eventów, więc zachęcam, zachęcam :).
EN: • (22.02, Lizbona) SINFO - największa darmowa konferencja o IT w Portugalii (chyba pierwszy raz będę na nie-strikte-technicznym wydarzaniu, więc jestem ciekaw jak wyjdzie).
W drugiej połowie roku najpewniej będę na PWNingu, i... może na czymś z zupełnie innej beczki, zobaczymy jak wyjdzie.
Z (bardzo przyjemnego) kronikarskiego obowiązku odnotowuje, że po czterech latach udało się nam powtórzyć wyczyn z 2014 i ponownie zająć pierwsze miejsce w klasyfikacji generalniej CTFtime.org! Co więcej, na podium, na trzecim miejscu, stanął również inny polski zespół - p4 :). Drugie miejsce zajął legendarny amerykański zespół Plaid Parliament of Pwning (gratulacje!).
Nowy sezon rozpocznie Insomnie'hack teaser CTF 19 stycznia i, jak to się mówi po angielsku, "mamy pewną historię" z tym CTFem - wygraliśmy teaser 5 razy pod rząd. Poprzeczkę ustawiliśmy sobie wysoko - powinno być ciekawie :).
Tak więc dla wszystkich graczy CTFowych sezonu 2018, oraz już niedługo 2019: GG, HF GL!
W okolicach lata 2014 zainspirowany zadaniem CTFowym membership z kwalifikacji na koreański Codegate 2014, stworzyłem artykuł opisujący jak działają wyjątki w C++ "pod linuxem", czyli w GCC/GNU libc/GNU libstdc++. A jest to mechanizm bardzo ciekawy, bo znaleźć w nim można np. maszynę wirtualną, która realizuje pewien specyficzny kod bajtowy w momencie rzucenia wyjątku.
W każdym razie artykuł został opublikowany a magazynie Programista, ale zapomniałem go wrzucić potem na swojego bloga. Czas więc to nadrobić:
Dodam tylko, że wersja artykułu z pierwszego linka może zawierać drobne literówki - jest to wersja po głównej korekcie, ale przed składem i drugą korektą.
P.S. Podziękowania dla j00ru i KrzaQ za techniczne review artykułu, oraz Tomasza Łopuszańskiego z redakcji Programisty za korektę. P.P.S. Artykuł powinien chyba nazywać się "Wyjątki u krasnoludów i elfów", bo... no wiecie, DWARF, ELF...
conference:code dive:security pwning:PUT security days
Ostatnio było na mini-tournée po Polsce na kilku konferencjach/wydarzeniach/etc, i m.in. miałem okazję wygłosić prelekcję pt. "C/C++ vs Security!" (właśnie z wykrzyknikiem na końcu, bo jak się okazało Redford miał podobną, tylko bez wykrzyknika ← kluczowa różnica). Slajdy pokazałem na code::dive we Wrocławiu (w wersji 60 minutowej po EN), PUT Security Day w Poznaniu (w wersji 60 minutowej po PL), oraz na Security PWNing w Warszawie (w wersji 30 minutowej po PL). W każdym razie obiecałem, że slajdy udostępnię, więc oto i są:
Slajdy PL: click (Google Docs; File→Download as jeśli kogoś interesuje inny format) Video PL: PUT Security Day
Slajdy EN: click (Google Docs; File→Download as jeśli kogoś interesuje inny format) Video EN: code::dive 2018
Takie krótkie info, że "Serious Cryptography: A Practical Introduction to Modern Encryption" autorstwa Jean-Philippe Aumassona została przetłumaczona na polski i wydana przez wydawnictwo PWN pod polskim tytułem "Nowoczesna kryptografia: Praktyczne wprowadzenie do szyfrowania". O książce wspominałem już na livestreamie (kilkukrotnie), ale wspomnę i tutaj - wg. mnie to świetna pozycja wprowadzająca do praktycznej kryptografii, tj. jeśli ktoś jest zainteresowany np. CTFami i zadaniami z kategorii "crypto", to jest to pozycja w zasadzie obowiązkowa. Podobnie w przypadku szukania błędów w kodzie korzystającym z dobrodziejstw kryptografii, np. przy okazji pentestów czy code security review (jak wiecie jest różnica między bezpiecznym algorytmem szyfrującym a faktycznym bezpiecznym użyciem takiego algorytmu w programie).
P.S. Jestem jednym z patronów medialnych polskiego wydania tej książki, stąd mój blurb na jej okładce. Jest to pierwsza i póki co jedyna książka w Polsce (poza .pl była jeszcze ta), której patronuje (srsly, good stuff ;>). P.S.2. Moje zadanie Better ZIP z Google CTF 2018 Quals było zainspirowane kilkoma stronami z tej książki :) (zadanie wraz ze źródłami, wideo z rozwiązania (start 28:45))
W najbliższy czwartek będzie całkiem ciekawy stream (moim zdaniem) zaproponowany przez dwie osoby z pewnej grupy Facebookowej* - dodawanie nieśmiertelności do gry Commando na 8-bitowy komputer Commodore 64. Dodam, że celem będzie uruchomienie gry z nieśmiertelnością na prawdziwym C64 - emulator też pójdzie w ruch oczywiście, ale ostatecznie jednak będę chciał przejść Commando nie wysilając się zbytnio na prawdziwym sprzęcie. Dodam, że gra jest na dyskietce 5.25", więc do całości dojdzie jeszcze pobawienie się starymi nośnikami. * Uhm, szczerze, wymieniłbym z imienia, ale nie mogę znaleźć komentarzy z naszą dyskusją :(
Disclaimer: Nie miałem nigdy C64 (ale "grałem w C64" u kolegów ;>), więc stream będzie bardziej na zasadzie "skoro na x86 zrobiłbym tak tak i tak, to na MOS6510 też tam spróbuje".
P.S. Przy okazji będzie to okazja do przetestowania mojego "setupu" do streamowania obrazu ze starych komputerów, tj. m.in. karty do przechwytywania HDMI.
Paweł "pawlos" Łukasik odnalazł ostatni easter egg (tudzież flagę) ukryty w Praktycznej Inżynierii Wstecznej - gratulacje! Dodam, że flaga ta pozostawała ukryta od momentu publikacji książki (listopad 2016) aż do wczorajszego wieczoru, i to pomimo tego, iż przynajmniej od pół roku było wiadomo, że flaga gdzieś tam jest, a na znalazce czeka giftcard (standardowo, na wybrany Amazon).
Zdecydowaną zaletą konkursów typu code golf / sizecoding jest łatwość testowania i oceny prac, dzięki czemu wyniki mogę ogłosić od razu po zakończeniu konkursu. Tak więc, nie przedłużając, chciałbym pogratulować następującym osobom (każda z nich otrzyma po wejściówce na konferencję Security PWNing 2017):
1. Marcin Probola (169 bajtów, zgłoszone 13.10.2017 23:17) 2. Robert Sebastian Gerus (169 bajtów, zgłoszone 14.10.2017 1:15)
Konkurs był niesamowicie zacięty - przyszły aż 22 rozwiązania z przedziału 170-179 bajtów, a w sumie zgłoszone zostały 84 potencjalne rozwiązania (w tym kilka nieprawidłowych).
Na przedostatnim streamie pojawiło się zadanie nazwane później "drone scan", w którym, "kontrolując" (trochę na zasadzie gry paragrafowej) skanującego drona, należało wykonać mapę bardzo dużych podziemi pod pewnym zamkiem. Rozwiązań pojawiło się zaskakująco dużo (podsumowanie rozwiązań przygotowane przez foxtrot charliego) i wspominałem już o nich na ostatnim streamie. Rzeczą nierozstrzygniętą pozostał ogłoszony podczas streamu konkurs na najlepszą animację (w postaci video) samego skanowania.
Na dole postu znajdują się wszystkie zgłoszone prace, ale zacznę od ogłoszenia zwycięzcy konkursy, do którego wędruje książka "Wprowadzenie do algorytmów" (czyli słynny "Cormen") ufundowana przez Wydawnictwo Naukowe PWN (podziękowania):
Autor zwycięskiej animacji: blamedrop - gratulacje!
Poprzedni livestream był bardzo ciekawy (przynajmniej dla mnie ;>) - miałem okazję zaprezentować prostą implementacje rozproszonego raytracingu, oraz poprosić widzów, by Ci wsparli rendering mocą obliczeniową. Założeniem było, że coś pójdzie "nie tak", a to z uwagi na absolutny brak mechanizmów weryfikacji poprawności wyników (co jest tematem kolejnego streama - w czwartek o 20). I na szczęście się udało, tj. coś faktycznie poszło "nie tak" i wynikowe sceny wyglądały jak przysłowiowa sztuka nowoczesna. W tym krótkim poście chciałem wskazać kilka oddzielnych klas rzeczy, które wpłynęły na ostateczny wygląd renderingu (patrz obraz po prawej).
Czas ogłosić wyniki konkursu (na śliczny Guru Panic of Death) ogłoszonego na ostatnim streamie, jak i na blogu! Temat lub termin chyba nie za bardzo Wam przypadły do gustu, bo przyszły jedynie trzy prace, które dodatkowo są dość zbliżone jeśli chodzi o poziom skomplikowania (screeny można zobaczyć poniżej). Tym łatwiej o wygraną :)
Niemniej jednak zwycięzca może być tylko jeden, więc bez dalszego przeciągania chciałbym pogratulować pajadamowi (do którego wędruje giftcard 50 GBP), którego praca najbardziej przypadła mi do gustu, jak i wymagała najwięcej pracy.
Wczoraj podczas livestreamu (OSDev #8) spontanicznie powstał pomysł na konkurs na zrobienie jak najładniejszego "blue screena śmierci" do systemu tworzonego podczas livestreamów (zwanego "Guru Panic of Death" w tym wypadku). Tj. celem konkursu jest takie przerobienie kodu obecnego jądra, by ekran wyświetlany w momencie krytycznego błędu w systemie był jak najładniejszy wizualnie. Zdaje sobie oczywiście sprawę, że to dość subiektywna sprawa, niemniej jednak zastrzegam możliwość wyboru rozwiązania, które mi osobiście się najbardziej podoba (tj. oceniał będę wedle tylko mi znanych kryteriów).
Główną nagrodą będzie giftcard na amazon.co.uk o wartości 50 GBP (jeśli będzie dużo dobrych technicznie i wizualnie prac jest całkiem prawdopodobne, że giftcardów znajdzie się kilka).
Zgłoszenia, w formie patchy LUB plików źródłowych do podmiany LUB pull requestów ORAZ OBOWIĄZKOWO screenshotów należy wysłać do 23:59 CEST (tj. letniego czasu polskiego) dnia 10.06.2017 na mój e-mail (gynvael@coldwind.pl) lub githuba (w przypadku PR; patrz niżej). Potwierdzał odbiór będę w ciągu 24h (w przypadku PR nie będę - na githubie od razu widać czy dotarło); gdybym nie potwierdził w tym terminie spytajcie mnie innym kanałem komunikacyjnym czy na pewno otrzymałem zgłoszenie.
Zasad za dużo nie ma - w sumie są dwie główne: - testował będę na Bochs'ie (tj. zgłoszenie musi działać pod tym emulatorem) - celem jest modyfikacja tego 'systemu operacyjnego', a nie Bochs'a :)
Na początku lutego w 27 odcinku moich livestreamów stworzyłem prosty kompilator JIT dla interpretera ezoterycznego języka Brainfuck. Standardowo dla zaoszczędzenia czasu nie robiłem żadnego sprawdzania błędów, więc w kodzie pojawił się nawet błąd klasy relative write-what-where, który na pierwszy rzut oka był eksploitowalny. Na końcu odcinka zaproponowałem więc drobny konkurs na eksploitacje wspomnianego błędu. Ostatecznie przyszły trzy eksploity, a dodatkowo dwóch autorów zdecydowało się napisać krótkie artykuły o tym jak ich eksploity działają. O samej eksploitacji, jak i o nadesłanych eksploitach, mówiłem w 33 odcinku livestreamów. Kilka linków na początek:
Dzisiaj w nocy zakończył się CONFidence DS Teaser CTF 2017 (CTFtime, strona CTFa). Zawody wygrała drużyna 217 z Taiwanu, i to w pięknym stylu - rozwiązali wszystkie przygotowane zadania w 16 godzin, 27 minut i 35 sekund - gratulacje! Drugie miejsce zajął australijski zespół 9447, a trzecie Shellphish z USA. Pełne wyniki można znaleźć na stronie CTFa (link na początku paragrafu), a ja skorzystam z okazji, żeby zaprosić na pełnometrażowy CONFidence DS CTF 2017, który odbędzie się standardowo w maju w Krakowie podczas konferencji CONFidence, i który jest otwarty dla wszystkich uczestników konferencji [format: drużyny po 4 osoby, jeopardy, 24-27h, offline, open].
Zachęcam do spróbowania swoich sił z moim JavaScript CrackMe - Starblind, które brało udział we wczorajszym CTFie jako RE200, i zostało rozwiązane przez 70 drużyn (wiec można spokojnie uznać, że jest raczej proste) :). Za kilka dni wrzucę źródła + może jakiś artykuł o nim.
W najbliższy weekend na AGH (wydział EAIiIB) odbędzie się "Wake Up!" - darmowe warsztaty z kilku działek IT. Zapisy są już otwarte, i może jeszcze są jakieś miejsca. Szczegóły na stronie projektu oraz FB.
Po 6 latach dodałem obsługę 64-bitowych (x86) platform (Windows, Linux) do asmloadera. Było tam trochę zabawy, żeby to mini-API działało z tą samą konwencją wywołań (cdecl) niezależnie od platformy, więc bawię się pomysłem nagrania krótkiego vloga o tym / ew. napisania artykułu na blogu - zobaczymy, czy będę miał czas na któreś z tych.
Nowy Programista jest już w Empikach (a w nim m.in. Strefa CTF - "BSidesSF 2017 – Pinlock" by Jarosław Górny).
Z perspektywy czasu jednym z błędów, które zrobiłem tworząc kurs asemblera na YouTube parę lat temu było wprowadzenie mechanizmu ASLR (a raczej: zdanie się na istniejący mechanizm ASLR w mmap/VirtualAlloc) przy wyborze adresu, pod który ma zostać załadowany kod maszynowy do uruchomienia. O ile sam mechanizm dobrze obrazuje realia współczesnych systemów operacyjnych, o tyle triki, które trzeba używać przy adresowaniu relatywnym w x86-32 wprowadzają trochę niepotrzebnego zamieszania dla osób początkujących. Lepszym rozwiązaniem byłoby zaczęcie od jednego, zdefiniowanego adresu gdzie zostanie załadowany program i korzystanie z adresowania bezwzględnego, i wprowadzenie ASLR w połowie/pod koniec serii. Niemniej jednak wyszło jak wyszło, więc od czasu do czasu pojawiają się pytanie o to, dlaczego nie można w łatwy sposób zaadresować fragmentów kodu lub danych korzystając z asmloadera. Poniższy post jest de facto fragmentem odpowiedzi na jedno z takich pytań, której udzieliłem chwilę temu w komentarzach na YT, ale po namyśle zdecydowałem, że może zainteresuje ona więcej osób (a przynajmniej będę miał do czego linkować w przyszłości).
Komentarz na YT autorstwa Kapa PL, zacytowany w całości (istotne z uwagi na przykładowy kod):
Nie rozumiem dlaczego tak nie może być :/ ET to nie jest adres danej linijki kodu ?
Tematem czwartkowego livestreamu był system plików ext2, a konkretniej próba stworzenia w Pythonie parsera obrazu partycji sformatowanej jako ext2. Ostatecznie po niecałej godzinie pisania udało się poprawnie sparsować superblock i napisać trochę kodu, który miał listować aktywne inode'y, ale ten coś nie chciał działać. Nie chciałem wtedy specjalnie przedłużać streama, szczególnie, że moja wiedza na temat ext2 ograniczała się do fragmentu specyfikacji, który przeczytałem rano przed streamem; obiecałem więc dokończyć na spokojnie w ciągu kilku dni, co też udało mi się wczoraj zrobić.
W skrócie, błąd sprowadził się do tego, że w niektórych miejscach (a w szczególności w polach bg_inode_bitmap oraz bg_inode_table deskryptora grupy bloków) numery bloków są podawane zaczynając od indeksu 1, a nie, jak założyłem, względem indeksu 0. Co więcej (i tutaj za bardzo dokumentacja nie pomagała) okazało się, że niektóre indeksy bloków (np. wskazane przed chwilą pola) są względne wobec początku grupy bloków, a w innych miejscach są to indeksy bezwzględne (tj. względne wobec początku partycji).
Po poprawieniu obu powyższych rzeczy listowanie inode'ów zaczęło (mniej więcej) działać, więc dopisałem jeszcze obsługę linków symbolicznych, katalogów i zrzucania zawartości plików. Ograniczyłem się natomiast tylko do obsługi bloków jawnie podanych w inode, tj. numery bloków podane niebezpośrednio (i_block, indeksy 12-14) zostały przeze mnie zignorowane. Co więcej, nadal kod ma jakieś problemy z inode'ami spoza pierwszej grupy, ale zawsze jest jakiś progres.
Dragon Sector zakończył sezon 2016 na drugim miejscu - czyli udało nam się powtórzyć rezultat z 2015 :). Trochę więcej rozpisałem się kilka dni temu na moim FB, więc wspomnę jedynie, że na piątym miejscu sezon zakończył inny polski zespół - p4 - gratulacje!
Wyszedł Sekurak/Offline #3, czyli darmowy e-zin o bezpieczeństwie (głównie webowym) prowadzony przez ekipę serwisu sekurak.pl. Link do linków ;)
Na ten moment tyle. "Słoniem w pokoju", jak to lubią mawiać nasi zachodni znajomi, jest pytanie kiedy kolejny stream - prawdopodobnie dopiero w następnym tygodniu, ale jeszcze zobaczymy jak wyjdzie.
Każdego roku Polskie Towarzystwo Informatyczne organizuje konkurs na "Najlepsze Polskie Książki Informatyczne". Przy okazji tegorocznej edycji wydawca zasugerował zgłoszenie i mojej książki - "Zrozumieć Programowanie" (zeszłoroczna edycja zakończyła się przed premierą ZP) - co też zrobiliśmy (w tym miejscu podziękowanie dla KrzaQ za fizyczne podrzucenie zgłoszenia, jak i również za przygotowanie wymaganego przez regulamin konkursu uzasadnienia zgłoszenia). Ogłoszenie wyników oraz uroczysta gala z tym związana odbyła się dwa dni temu - 30 listopada 2016 - na Uniwersytecie Szczecińskim, gdzie też udał się mój wydawca (Łukasz Łopuszański). Wczoraj rano otrzymałem od niego bardzo krótkiego (3 wyrazy + emotikonka), ale i bardzo pozytywnego mejla: „Dostałeś główną nagrodę 😄”. Jak możecie się domyślić, mój wyraz twarzy szybko dostosował się do sugerowanego przez wspomnianą emotikonkę ;)
Więc tak, to oficjalne: „Zrozumieć Programowanie” otrzymało Główną Nagrodę w konkursie na Informatyczną Książkę Roku 2016 w kategorii książek popularnonaukowych! :)
Należy w tym momencie wspomnieć, że ex aequo Główna Nagroda w tej samej kategorii została przyznana Adamowi Romanowi za "Testowanie i jakość oprogramowania. Modele, techniki, narzędzia" (to taka wielka czarna księga, ponad 1000 stron - stoi zresztą u mnie na półce; gratulacje dla pana Adama!). Książka ta również została wydana przez Łukasza i PWN, więc mój wydawca zdecydowanie miał co odbierać.
Pełną listę laureatów można znaleźć na stronie PTI; wspomnę od razu, iż oprócz Nagród Głównych były przyznawane również Wyróżnienia, a oprócz kategorii książek popularnonaukowych była również kategoria książek naukowych.
P.S. No, to wg regulaminu konkursu (§ 4 pkt. 7 b) teraz mogę pisać, że ZP jest Informatyczną Książką Roku - PTI 2016 :)
Książka - „Praktyczna inżynieria wsteczna: Metody, techniki i narzędzia” - skończona i oddana do druku, czas więc na zapowiadany post o tym co nam z tej książki wyszło, co się w niej znalazło, kto ją pisał, jaka jest okładka, grupa docelowa odbiorców i gdzie można ją kupić. Będzie też o spotkaniu autorskim.
Losowe informacje o książce
Tytuł: „Praktyczna inżynieria wsteczna: Metody, techniki i narzędzia”
Autorzy: (w kolejności rozdziałów w książce): Tomasz Bukowski, Grzegorz Antoniak, Tomasz Kwiecień, Mateusz Krzywicki, Marcin Hartung, Gynvael Coldwind, Hasherezade, Maciej Kotowicz, Michał Kowalczyk, Robert Święcki, Piotr Bania i Mateusz Jurczyk
Rodzaj książki: techniczna, specjalistyczna, zbiór opracowań/artykułów
Poziom trudności: zależny od konkretnego rozdziału - są rozdziały dla początkujących, dla zaawansowanych i dla profesjonalistów; są też ciekawostki dla wszystkich; taki mix
Wydawnictwo: Wydawnictwo Naukowe PWN
Data premiery: 4.11.2016 (a przynajmniej taki jest plan)
Spotkanie autorskie odbędzie się w Warszawie 7 listopada (18:00 - 20:00), w Klubie ARCO, który znajduje się przy ul. Bitwy Warszawskiej 1920 r. 19. Technicznie jest to część agendy konferencji Security PWNing, natomiast samo spotkanie będzie otwarte i bezpłatne.
Na spotkaniu będzie większość autorów książki (tj. Tomasz Bukowski, Tomasz Kwiecień, Mateusz Krzywicki, Marcin Hartung, Maciej Kotowicz, Michał Kowalczyk, Robert Święcki oraz Mateusz Jurczyk) i będzie ono miało formę panelu (prowadzonego przeze mnie), a potem odbędzie Q&A jeśli będą pytania. A na końcu oczywiście stała część spotkań autorskich, czyli podpisywanie książek :) Dodam, że jeśli wszystko pójdzie dobrze (a na to się zanosi), to będzie stoisko PWN z zapasem książek do nabycia. Na tą chwilę jest to jedyne przewidziane spotkanie autorskie (dość trudno jest zebrać tak liczną grupę autorów w jednym miejscu w tym samym czasie).
Jak już wspominałem, 7-8 listopada w Warszawie odbędzie się konferencja Security PWNing Conference, przy której organizacji trochę pomagam od strony programowej. Sama konferencja organizowana jest przez Wydawnictwo Naukowe PWN, natomiast charakter będzie miała mniej akademicki, a bardziej praktyczny/scenowy (w rozumieniu sceny profesjonalistów i hobbystów zajmujących się praktycznym bezpieczeństwem IT). Kilka słów o niej, o tym czym się kierowaliśmy wybierając prelegentów i o nich samych poniżej.
Podstawowe informacje
Kiedy: 7-8 listopada 2016
Gdzie: Warszawa, Klub ARCO, ul. Bitwy Warszawskiej 1920 r. 19
Ile: ~1111 PLN, a z magicznym kodem (Gyn20PWNing) ~888 PLN
Język: Polski, z wyjątkiem jednej prelekcji (James Forshaw)
Ostatnio mam trochę więcej innych zajęć niż zwykle, więc jeszcze nie jestem w stanie podać dat kolejnych livestreamów (choć po cichu liczę, że uda się coś w ciągu tygodnia zrobić). W związku z tym niniejsza "garść" newsów sprowadzi się w zasadzie jedynie do informacji o nowym, niejako jubileuszowym (50), numerze magazynu Programista, w którym jest kilka niezłych perełek, jak i również j00ru i mój artykuł o współczesnym fuzzingu.
Jak wspominałem już na blogu/streamie, 30 sierpnia (czyli za dwa dni) robimy z xa//vx (czyli autorem książki "HTML5 komponenty", a jednocześnie nadwornym grafikiem vexillium) podwójny 16-godzinny stream, podczas którego spróbujemy zrobić grę multiplayer. Konkretniej, spróbujemy zrobić widzianą z boku grę akcji w stylu takich klasyków jak Liero czy Soldat, przy czym głównym motywem będzie jetpack. W zasadzie od kiedy pamiętam braliśmy z xa udział w tego typu ograniczonych czasowo zabawach, zarówno we dwójkę (click 1, click 2, click 3), jak i drużynowo (click 1, click 2, click 3, click 4, click 5). Czasem wychodziło lepiej (top1-3 na danym compo/konkursie), czasem gorzej (gry nie udało się dokończyć, albo nie zadziałała podczas prezentacji), ale zawsze bawiliśmy się nieźle - stąd też pomysł, żeby ćwiczenie powtórzyć, tyle, że tym razem na streamie.
Przy okazji złożyło się o tyle fajnie, że odezwał się do mnie ebookpoint.pl (czyli internetowa księgarnia z grupy Helion) z propozycją zorganizowania promocji mojej książki na ich fanpage'u na FB (tak, dobrze pamiętacie, moją książkę wydał PWN; natomiast również można ją kupić w e-bookowej księgarni Helionu), więc postanowiliśmy połączyć obie aktywności w jedną. Co więcej, podczas streama będzie sporo zniżek w ebookpoint.pl (z informacji które dostałem mają być zniżki na około 500 tytułów), a także będą promocje na drukowane wydanie naszych (tj. xa i mojej) książek w księgarni PWN (trochę więcej szczegółów pojawi się podobno w przeddzień streamów / w dniu samego streama). Konkretny plan na dzień znajduje się poniżej (w treści posta).
Przez następny tydzień będę trochę zajęty niestety, więc streamu się raczej nie uda zrobić (kolejny stream będzie więc 30 sierpnia, od 8 rano do północy, 16h - więcej szczegółów bardzo niedługo), więc, żeby zbyt nudno nie było, zróbmy sobie kolejne compo. TL;DR: tym razem tematem będzie gra w 1234 bajtach; nagroda jak ostatnio - amazon.co.uk gift card na 100 GBP. Szczegóły w treści posta.
Pamiętacie mój crypto-challenge "Pocztówka z Doliny Krzemowej" (#1, #2)? Przyszła kolej i na mnie - dzisiaj w poranno-popołudniowej poczcie znalazłem pocztówkę od KrzaQ, która zdecydowanie wymagała rozszyfrowania przed przeczytaniem. Poniżej zdjęcie samej pocztówki, jak i rozwiązanie zagadki w kilku krokach.
Wróciłem do Konfederacji, więc czas i wrócić do livestreamów. Planuje dwa na najbliższy tydzień:
12.07 19:00 na gynvael.coldwind.pl/live - wstęp do fuzzingu, w ramach kilkuodcinkowej przerwy od OSDev.
15.07 19:00 na gynvael.coldwind.pl/live-en - pierwszy stream po angielsku, na którym pokaże rozwiązanie bliżej nieokreślonego zadania z zeszłych CTFów (ponieważ to będzie pierwszy odcinek w tym języku, to pewnie zacznę od czegoś mi znanego, tj. albo zadania, które sam zrobiłem, albo takiego, które już kiedyś rozwiązywałem). Link do /live-en w tej chwili nie jest jeszcze aktywny, natomiast prawdopodobnie będzie prowadził na livecoding (w ramach drugiej szansy dla tej platformy).
Z innych tematów, skończył się konkurs wiecha, który organizował na naszym kanale IRCowym (#gynvaelstream @ freenode). Wyniki, prace oraz ich analizę można znaleźć na blogu wiecha. Zachęcam do rzucenia okiem - samo zadanie konkursowe było proste, ale podejścia do jego rozwiązania bardzo różne. Ostatecznie nagrodę (w postaci książek) otrzymali mrx1 oraz google13 - gratulacje! Równocześnie podziękowania dla wiecha za organizacje kolejnego konkursu, jak i zasponsorowanie nagród!
Najpierw wyniki losowania trzech egzemplarzy książki „HTML5 Komponenty” autorstwa Sebastiana "xa" Rosika. Książka została wydana przez wydawnictwo PWN, które jest jednocześnie fundatorem nagród - dzięki! Magiczny skrypt we współpracy z /dev/urandom wylosował następujące trzy osoby: emzet, Lonek Wolf, pajadam - gratulacje! Mejle z prośbą o adres już do Was wysłałem (no, nawet dostałem już część odpowiedzi).
Kilka notatek po ostatnim streamie + data kolejnego:
W środę/czwartek odbył się w Belluminar - CTF rozgrywany w Pekinie (przy czym dodatkowi gracze mogli grać również online), który był dość eksperymentalny jeśli chodzi o... wszystko. Przede wszystkim udział wziąć mogły jedynie zaproszone drużyny; zgodnie z opisem zostało zaproszone 10 najsilniejszych drużyn na świecie, w tym 5 według rankingu CTFTime.org (w którym nasza drużyna trzyma się w okolicach top1-3 od kilku lat), a 5 kolejnych spośród azjatyckich drużyn (ostatecznie znalazły się tam topowe drużyny z Chin, Taiwanu i Korei). Co więcej, zadania były przygotowywane również przez same drużyny (a nie przez organizatorów) - każda drużyna przygotowywała dwa zadania, z czego jedno musiało być związane z Windowsem; swoje zadania należało również zaprezentować po samym CTFie, za co otrzymywało się dodatkowe punkty (i to całkiem sporo). Interesująca była również pula nagród - top1 otrzymywał 50 tyś. USD, top2 30 tyś., a top3 20 tyś. Dragon Sector wywalczył czwarte miejsce, więc niestety musieliśmy obejść się smakiem (so close!). Dodam, że w skład reprezentacji Dragon Sector do Pekinu polecieli: valis, Redford, mak, jagger oraz Lympho - kudos! Ostatecznie wygrał zespół KeyResolve, który de facto składał się z członków koreańskiego DEFKOR (jest to zespół który wygrał ostatni DEF CON CTF w Vegas) oraz amerykańskiego PPP (którego chyba nie trzeba przedstawiać).
Następny stream: piątek 10.6 19:00 na gynvael.coldwind.pl/live. Jak wspominałem, będzie to powtórzenie mojej prelekcji z KrakWhiteHat pt. "Wstęp do RE". Na jeszcze kolejnym streamie wrócimy do OSDev, dodamy A20 i spróbujemy uruchomić to co mamy na prawdziwym komputerze.
Wczorajszy stream można znaleźć na YT - o dziwo tym razem wszystko zadziałało (no, może nie za pierwszym razem, ale ostatecznie zadziałało) i udało się skończyć o czasie. Kod można znaleźć na moim githubie. Kilka dodatkowych notatek z czatu (które wychwyciłem dopiero po streamie) znajduje się pod tymi newsami. Na streamie ogłosiłem również konkurs: KONKURS (tym razem skillowy) DO: 12.06 23:59 Napisz efekt graficzny: - działający w trybie tekstowym - działający jako bootloader - zajmujący max 512 bajtów (stage1 ;>) - działający minimum pod Bochs Nagroda: gift card 100 GBP na amazon.co.uk Kod źródłowy oraz wersję skompilowaną (i najlepiej również bochsrc) należy podesłać na mojego mejla do następnej niedzieli do godziny 23:59; po wysłaniu mejla plz dajcie mi również znać w komentarzach/na ircu/gdziekolwiek, że wysłaliście, tak abym mógł potwierdzić, że praca doszła. Good luck!
(Post gościnny by reenz0h) Na ostatnim streamie OSDev#3 Gynvael kontynuował rozwijanie bootloader'a, aby ostatecznie wejść w tryb long mode. Ustawił odpowiednie parametry procesora (GDT, PAE, EFER MSR, etc.), ale próba wejścia w stronicowanie przy użyciu 1GB stron nie powiodła się. Emulator Bochs przerywał działanie z błędem "physical address not available":
<bochs:1> c (0).[166562263] ??? (physical address not available) Next at t=166562264 (0) [0x00000000fffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0 Postanowiłem znaleźć trochę wolnego czasu i spróbować uruchomić ten kod u siebie.
Wczoraj podczas livestreamu m.in. pokazywałem jak rozwiązywało się zadanie plaiddrive (WEB450) z PlaidCTF 2016, i jak to zwykle bywa podczas demo ciekawszych rzeczy, coś nie zadziałało. Konkretniej, w kluczowym momencie chciałem pokazać, że można przejść po ramkach obiektu window niezależnie od originu przebywanych ramek, aż do ramki z tym samym originem; a następnie dostać się do jej treści - i zamiast dostępu do location/document dostałem widoczny wyżej wyjątek, że originy się nie zgadzają. Stwierdziłem wtedy, że pewnie robię jakiś głupi błąd - i w rzeczywistości tak było ;)
Livestream Kiedy: 13.04 (środa) od 19:00 Temat: 15 minut losowych rzeczy, a potem OSDev #1 Gdzie: mój kanał YT (link do streama pojawi się tutajEDIT click /EDIT oraz w sekcji „Live now” na YT).
CONFidence CTF 2016 Teaser Co to: organizowany przez nas (Dragon Sector) teaser CTF. CTF format: jeopardy, team, online, teaser (6-12 zadań), 24h Gdzie: https://ctf.dragonsector.pl/ - rejestracja jest otwarta Nagrody: związane z głównym CTFem, który odbędzie się podczas konferencji CONFidence 19-20 maja w Krakowie (wejściówki, pokrycie kosztów przejazdu, noclegi - szczegóły na stronie CTFa) CTFTime: click; CTF jest liczony do klasyfikacji generalnej
KrakYourNet Co to: 5-dniowa konferencja ze szkoleniami i CTFem; na miejscu w Krakowie; Kiedy: 19-23 kwietnia Gdzie: AGH Ile: bezpłatnie (łącznie z warsztatami; przy czym trzeba się zapisać) Temat: bezpieczeństwo sieciowe, IoT, aplikacje mobilne CTF: Jest - Capture the FlAGH (rejestracja na stronie konferencji - trzeba myszką najechać na czerwony kwadrat z napisem "Capture The Flag" w sekcji Warsztaty) CTF format: jeopardy, team (limit: 3 osoby), offline, tylko dla studentów poniżej 26 roku życia, 3 dni CTF nagrody: staż w EY, kindle, słuchawki, powerbanki, inne CTFTime: CTF nie jest liczony do klasyfikacji generalnej WWW: http://krakyournet.pl/
Mój wydawca podrzucił mi informacje, że wypuszcza książkę o Minecraft. Przyznaję, że w Minecraft nigdy nie grałem i kojarzy mi się z dziwnymi zadaniami na CTFach, grafikami z miliona klocków czy masą książeczek/kubków/podkładek/etc z motywami z Minecrafta, które można znaleźć w lokalnych księgarniach (serio, mają całe póki tego). W każdym razie, odpisałem coś w stylu "to nie wygląda jak coś co zainteresuje moich czytelników" (dla nowych czytelników: na moim blogu nie można wykupić reklamy, ani kupić zamówionego/sponsorowanego posta - jeśli uważam, że coś nie zainteresuje programistów którzy czytają mojego bloga albo mnie, to tego po prostu nie wrzucam), na co Łukasz (mój wydawca) dopowiedział "skryptuje się to w Pythonie" - i przyznaje, że tu mnie miał, z dwóch powodów. Po pierwsze, jak wiecie, lubięPythona. Po drugie, lata temu miałem okazję pobawić się trochę w skryptowanie innej gry (przy czym w escript, a nie w Pythonie - być może część z Was nawet pamięta jakieś moje tutoriale, choć tylko kilka ich wyszło) i się świetnie przy tym bawiłem. W każdym razie doszedłem do wniosku, że być może kogoś (szczególnie młodszego, bo książka jest o podstawach programowania pisana dla młodszych odbiorców) zainteresuje, szczególnie, że wiem też, że część czytelników ma już potomków - stąd ten mini-post.
Z tego co widzę teraz jest faza preorderu, a sama książka wychodzi 25 kwietnia. Książka jest z tej samej serii co dwie inne o których pisałem wcześniej na blogu - o Pythonie (ale bez Minecrafta) i o JS. Dodam jeszcze na koniec, że wygląda na to, że będę miał 3 egzemplarze do rozdania na livestreamie (domyślam się, że Was raczej nie zainteresuje, ale każdy ma jakąś rodzinę/znajomych/dzieci/etc, tj. kogoś, kto mógłby się ucieszyć z prezentu tego typu).
Czas na Secunda Aprilis (no OK, bardziej Quarta Aprilis), czyli wytłumaczenie/sprostowanie Prima Aprilisowego postu. W dużym skrócie, w tym roku na pierwszego kwietnia opublikowałem "pierwszą część wideo-tutoriala języka Python", w której pokazałem jak "w prosty sposób" stworzyć funkcje literującą podany napis, a następnie jak narysować (sic) moduł Pythona z ową funkcją w programie Microsoft Paint. Oba podane przykłady były pokazane w bardzo bardzo krzywym zwierciadle, niemniej jednak oba były w pełni działające - stąd też postanowiłem poświęcić trochę miejsca, żeby dokładnie(j) wytłumaczyć co tam się w zasadzie działo. Dodam, że żart wyszedł mi lepiej niż się spodziewałem, co wnioskuje po tym, że kilka osób zorientowało się, że "coś jest nie tak" dopiero jak odpaliłem Painta :)
O konkursie na dokończenie xoxoxo pisałem już wcześniej na blogu, jak i mówiłem podczas livestreamów. W skrócie, chodziło o to by trochę "uładnić" grę - dodać jakieś ASCII-arty, kolory, itp., a do wygrania była prenumerata Programisty (w tym miejscu wielkie podziękowania dla redakcji za dorzucenie drugiej prenumeraty do puli nagród!). Ostatecznie wyszło dość kameralnie - tj. zostały zgłoszone dwie pracę, a komisja w N-osobowym składzie: KrzaQ, KrzaQ oraz KrzaQ, zdecydowała o przyznaniu miejsc w następującej kolejności:
Tak jak wspominałem na poprzednim streamie, zacząłem nagrywać video-kurs języka Python. Pierwszy odcinek już jest na YouTube - pokazuje w nim jak napisać proste Hello World, oraz jak tworzyć własne funkcje oraz rysować własne moduły. Kod stworzony podczas odcinka znajduje się oczywiście na githubie - dodam, że testowałem go jedynie pod Windows 10 na Python 2.7.3 64-bit. Miłego oglądania!
Podczas jednego ze streamów bawiłem się wczytywaniem rozpakowanych plików .xp (REXPaint), czyli ASCII-artów, w których zarówno kolory czcionek, jak i kolory teł mogły być dowolnie zdefiniowane (w rozumieniu RGB). Ich wyświetlenie wymagało zmiany domyślnej palety kolorów w Windowsowej konsoli, co jest jak najbardziej możliwe. Nieprzewidzianym efektem ubocznym zmiany palety kolorów była zmniejszająca się konsola - każde wywołanie pary GetConsoleScreenBufferInfoEx + SetConsoleScreenBufferInfoEx powodowało utratę jednego wiersza i jednej kolumny (ew. czasem, w zależności od ustawień, jedynie jednego wiersza). Z efektem tym zresztą spotkałem się zresztą kilka dni wcześniej, podczas gdy siedzieliśmy z masakrą (znanym Wam pewnie jako moderator na livestreamie) nad Pythono'wym ctypes i wywoływaniem wspomnianych wcześniej funkcji, jednak ani wtedy, ani podczas streamu nie zagłębiłem się w temat na tyle, żeby dojść co jest problemem. Wczoraj jednak znalazłem trochę czasu.
Serwis sekurak opublikował przed kilkoma godzinami drugi numer e-zina sekurak offline - jest dostępny w PDF, Mobi i EPUB, i ma 65 stron (w PDFie). Autorami artów w tym numerze są: Michał Bentkowski (aż cztery artykuły), Rafał "bl4de" Janicki, Adrian "Vizzdoom" Michalczyk (dwa artykuły), Marcin Bury i Bartosz Jerzman. Dodam, że numer jest poświęcony przede wszystkim websecurity, choć i o crypto coś się znajdzie.
Od jednego z czytelników (pozdrowienia dla Jakuba) dostałem pytanie odnośnie samego początku rozdziału „Synchronizacja” (rozdział 9 mojej książki), gdzie to podałem przykładowy kod w Pythonie, który sprawdza czy plik istnieje, a jeśli nie, to go tworzy. W książce był to w zasadzie „anty-przykład” - kod ten jest dość oczywiście podatny na race-condition (sytuację wyścigu), ponieważ sprawdzenie czy plik istnieje i jego utworzenie w tym wypadku to dwie oddzielne operacje, a więc taki plik mógłby w tzw. międzyczasie powstać (tj. istnieje pewne okno czasu, w którym możliwe jest utworzenie pliku). W zależności od przypadku może to być zupełnie nieistotne sytuacja lub poważny błąd bezpieczeństwa pozwalający na podniesienie uprawnień. Czytelnik wskazał jednak, że nigdzie (w okolicy) nie napisałem jak to powinno być poprawnie zrobione - stąd ten post.
Taki krótki news: na stronę serwisu książki wrzuciłem pierwszą część erraty, a na GitHub kody źródłowe, które trafiły do książki. Oprócz tego, również na GitHubie, założyłem repozytorium na rozwiązania ćwiczeń z książki, jeśli ktoś tako chce podesłać - pull requesty mile widziane (pierwsze trzy rozwiązania już są opublikowane).
1. Udostępniłem wszystkie ilustracje z książki w trochę lepszej jakości (długi bok ustawiony na 1600 px). 2. W podpowiedzi we fladze Juliet jest drobny błąd, w związku z czym wrzuciłem pewną podpowiedź na stronę z flagami.
P4CTF 2015 odbył się z miniony weekend i organizowany był przez polski zespół CTFowy p4, związany poniekąd z serwisem 4programmers.net (i który niedawno połączył się z innym polskim teamem - Amber Chamber). CTF ten można scharakteryzować tagami: single player, jeopardy, entry-level, online. W każdym razie po tym CTFie jest wysyp materiałów, zarówno od strony write-upów jak i informacji zza kulis. Linki poniżej - miłej lektury!
Gratulacje dla akrasuski1 za top1, a także dla wszystkich, którzy wzięli udział i dzielnie walczyli! p4 - świetna robota z CTFem - do zobaczenia na CTFie Chaos Communication Congress za kilka dni!
Krótki news: wyszedł nowy numer magazynu Programista (42) - można go znaleźć w Empiku / w prenumeracie / pisząc mejla do redakcji. Czytałem wcześniej (zaleta bycia recenzentem) dwa artykuły, które trafiły do tego numeru i które sądzę, że zainteresują czytelników mojego bloga: „Piszemy własny RTOS!” (Radosław Biernacki) oraz „HITCON CTF 2015 – Rsabin” (Jarosław Jedynak i Stanisław Podgórski z teamu p4). Ten pierwszy jest jednym z ciekawszych artykułów które czytałem w Programiście i traktuje o (jak nazwa wskazuje) pisaniu własnego systemu czasu rzeczywistego (w tym przypadku w kontekście platformy AVR, ale większość kodu jest uniwersalna / kompatybilna z x86). Ten drugi jest natomiast solidnym write-upem o wysoko punktowanym zadaniu z kategorii crypto z HITCON CTF 2015 - zdecydowanie polecam.
Bardzo krótki news: wrzuciłem wersję bardzo-alpha serwisu książki; póki co można tworzyć konta i wrzucać flagi. Zachęcam do testów - https://zrozumiecprogramowanie.pl/ (HTTPS only). W następnym tygodniu postaram się podpiąć kolejną część serwisu (erraty). I tyle.
Nadal w temacie książki - trzy newsy (a w zasadzie dwa i brak newsa): e-book (Mobi, EPUB) "Zrozumieć Programowanie" jest "już" dostępny (nie jest źle, tylko tydzień opóźnienia) - szybki link do ibuk.pl (gdzie obecnie jest najtaniej wg moich informacji - o tym "dlaczego" napiszę więcej w treści posta); wydawca udostępnił również jeden pełen rozdział książki ("Procesy") do pobrania w formie Mobi/EPUB/PDF (trzeba podać maila) - szybki link do it.pwn.pl; a serwisu jak nie było, tak nie ma - TL;DR: niestety tylko w weekendy obecnie mam czas, żeby przy nim siedzieć; liczyłem, że w zeszły weekend uda się coś już wrzucić, ale wygląda na to, że dopiero w nadchodzący uda się to faktycznie zrobić. A teraz jeszcze raz to samo...
Oficjalnie premiera książki była we wtorek, tj. od wtorku powinny do Was docierać zamówione egzemplarze (i z tego co mi wiadomo, po licznych fotkach wrzucanych na fb/mikroblogach/twitterze/etc, faktycznie docierają mniej lub bardziej sprawnie, a pierwsze literówki już zostały odnalezione). W związku z tym stwierdziłem, że napisze jakiś nowy post z kilkoma informacjami różnymi związanymi z książką, jej dystrybucją, spotkaniami autorskimi, serwisem książki itp. O części z nich już pisałem tu i tam, ale uznałem, że dobrze będzie je zebrać z wpisów/komentarzy/fb/etc w jedno miejsce.
Zgodnie z przewidywaniami, o których pisałem na FB kilka dni temu, pierwotny (już raz rozszerzony) nakład mojej książki rozszedł się w całości (na marginesie: WOW - dzięki za zaufanie!). Mój wydawca od razu umówił dodruk w drukarni, natomiast chwilę to potrwa i kolejny nakład będzie gotowy dopiero w drugiej połowie listopada. A więc wysyłka egzemplarzy zamówionych od mniej więcej dnia wczorajszego nastąpi dopiero po ich wydrukowaniu - za opóźnienia bardzo przepraszamy. Z uwagi na to książka będzie niedostępna w przedsprzedaży od dzisiaj do poniedziałku. W poniedziałek sprzedaż (w tym ostatni dzień przedsprzedaży - w końcu we wtorek premiera ;>) ruszy ponownie, właśnie tych egzemplarzy, które będą drukowane w listopadzie. Raz jeszcze przepraszam za problem (choć od strony autora - it's a good problem to have).
Nieczęsto wrzucam na bloga informacje o wychodzących książkach, z którymi nie mam nic wspolnego (przychodzą mi na myśl tylko dwie okazje: analiza merytoryczna pewnej książki oraz mini e-książka Xa), niemniej jednak mój wydawca podrzucił mi ostatnio dwie pozycje, które uderzyły w nostalgiczną nutę i o których postanowiłem przynajmniej wspomnieć w formie krótkiej notki. Co ciekawe, nie jestem targetem tych książek. Ba, nie sądzę, żeby większość czytelników była bezpośrednio grupą docelową - otóż książki są przeznaczone dla najmłodszych. Mowa o "JavaScript dla dzieci. Programowanie na wesoło" (premiera była w poniedziałek) oraz "Python dla dzieci" (premiera w piątek). Tak więc post ten zainteresuje raczej starszych czytelników, będących w posiadaniu przedstawicieli grupy docelowej ;)
W poprzednim poście wspominałem, że fragmenty mojej książki przedpremierowo będzie można przeczytać m.in. w nadchodzącym numerze magazynu Programista - numer ten powinien pojawić się dzisiaj w Empikach i powoli docierać do prenumeratorów.
Jak wspomniałem już na mikroblogu na 4programmers.net, kilka dni temu moja książka („Zrozumieć Programowanie”) trafiła do pierwotnego składu - to znaczy, że jest już napisana i po edycji. Została ostatnia korekta i, już niedługo, druk. W tym poście chciałem napisać coś o książce, jak i również o podcastach do których chce wrócić.
Michał Sajdak dał mi znać, że przed chwilą został opublikowany pierwszy numer Sekurak/Offline - e-zinu (PDF/EPUB/MOBI) o bezpieczeństwie. Pierwszy numer w całości poświęcony jest bezpieczeństwu web-aplikacji i jest tam opisane przede wszystkim sporo podstaw (może warto podrzucić numer programistom webowym w swojej firmie?).
Drodzy czytelnicy mojego bloga - jak w temacie posta: Preferujecie książki techniczne (550 stron) w twardej oprawie czy w miękkiej oprawie? Odpowiedzi prosiłbym wrzucać w komentarzach.
Wracając do tematu książki i tłumaczenia angielskich technicznych terminów na język polski, zebrała mi się kolejna seria słówek, z których tłumaczeniem mam pewien problem. Co więcej, na co dzień często używa się angielskich wersji tych słów, co nie ułatwia sprawy. Stąd też chętnie przedyskutuje z Wami (czytelnikami mojego bloga) potencjalne tłumaczenia słów. Chętnie też zapoznam się z alternatywnymi tłumaczeniami.
Jednej rzeczy, której mi brakowało na polskiej scenie CTF był jakiś sajt na którym zainteresowani mogą się spotkać i dobrać w teamy. Hintowałem raz czy dwa, że coś takiego by się przydało, no i ostatecznie wynająłem pewną firmę, żeby na szybko coś takiego zrobiła: http://ctfteam.pl.
W komentarzach do ostatniego postu została mi zwrócona uwaga (całkiem słusznie zresztą), że ostatnio nie wrzucam nic technicznego - w zasadzie same ogłoszenia o DS/Programiście/książce/książce Xa/CTFach/etc. Więc, zgodnie z życzeniem czytelników, będzie to post częściowo techniczny. A częściowo rant, na to, że najwyraźniej trzeba być osobą techniczną, żeby można sobie spokojnie pograć w gry komputerowe (i to nie z winy gier)...
TL;DR: PWN daje dostęp do 1500 ebooków (via wirtualna czytelnia, na 7 dni) za wypełnienie ankiety; wyszedł nowy Programista, jest i nowa promocja. Szczegóły poniżej.
Rok temu z przyjemnością pisałem, że nasz (powstający jeszcze wtedy) team CTFowy zakończył sezon 2013 na trzecim miejscu w klasyfikacji generalnej prowadzonej przez CTFTime.org. Cel w sezonie 2014 był jasny - zakończyć sezon na pierwszym miejscu. Miło jest mi napisać, że plan udało się zrealizować :) (P.S. w czwartek od 12:00 odbędzie się nasze AMA o CTFach/etc na wykop.pl).
Przez "ebook" rozumiem krótką książeczkę (50 stron) dostępną w PDFie, taką jak to co poprzednio z j00ru wypuściliśmy. Wydał ją (jak i w naszym przypadku) PWN i można ją znaleźć na IT.PWN.PL (dokładny link poniżej).
Szybkie info: wyszedł (tj. powinien być już w Empikach) nowy numer Programisty. Spis treści można znaleźć tu, a podgląd numeru na YT tam (huh, tego jeszcze nie widziałem, fajny pomysł). Jest w nim oczywiście kolejne "Zdobyć flagę..." w Strefie CTF, tym razem autorstwa Michała "Redforda" Kowalczyka z Dragon Sector, który pisze o zadaniu "Get your gatling at Garrettling!" z Hack.lu 2014 CTF (który to CTF zresztą wygraliśmy). Dodam jeszcze, że numer ma delikatnie ponad 100 stron (czyli więcej niż zwykle) a wraz z nim jest pewna promocja - jeśli kupi się Programistę w Empiku, to można od redakcji dostać 3 dowolne numery w wersji elektronicznej (wystarczy wysłać im fotkę/skan paragonu z widocznym aktualnym numerem na adres redakcji - redakcja@programistamag.pl - wraz z info które numery by się chciało).
Jak już wspominałem, wygląda na to, że piszę książkę. W komentarzach pod poprzednim, a zarazem pierwszym, postem o niej sporo miejsca poświęciliście na tłumaczenie polskich terminów - i słusznie. Jak wiecie, w polskojęzycznej literaturze i pracach naukowych czasami spotyka się dość dziwne tłumaczenia (kilka przykładów poniżej), których de facto nie używa się w codziennych dyskusjach z kolegami w zespole, znajomymi ze środowiska, czy w dyskusjach widywanych na szeroko pojętej scenie informatycznej. Stąd też zasugerowałem w komentarzach, że będę spisywał co poniektóre terminy i wrzucał na bloga celem przedyskutowania z Wami której wersji tłumaczenia/spolszczenia najlepiej użyć. Niniejszy post jest pierwszym z tej serii - generalnie wszelkie sugestie i uwagi mile widziane :)
Krótki news: dostałem informacje, że w piątek o 20:00 zaczyna się online CTF, indywidualny (single-player), w stylu jeopardy (zadania do rozwiązania), organizowany przez wrocławską firmę PGS Software. Zadanka mają być w większości entry-level, więc jest to zdecydowanie dobra okazja również dla osób, które nigdy wcześniej nie grały, a chciałyby spróbować. Z tego co widzę na stronie, to za top1-3 będą również nagrody.
Co prawda nieśmiało wspominałem już w kilku miejscach o tym, że piszę książkę, ale do tej pory nigdzie na moim blogu nie wrzuciłem o tym żadnej oficjalnej informacji. Przyszedł czas by to nadrobić. W dużym skrócie: książka będzie nosić tytuł "Zrozumieć programowanie" i kieruje ją głównie do osób początkujących oraz średnio zaawansowanych zainteresowanych programowaniem (chociaż mam nadzieje, że osoby zainteresowane RE i bughuntem też dowiedzą się z książki czegoś co ich ciekawi, a przynajmniej zyskają wiedzę o oprogramowaniu, która jest potrzebna w tych dwóch działkach). Głównym moim celem jest aby po aktywnym (tj. z wykonaniem sugerowanych ćwiczeń/zadań) przeczytaniu książki czytelnik nabrał samodzielności w rozwiązywaniu problemów związanych z tworzeniem oprogramowania, potrafił poruszać się i analizować nieznany sobie kod bardzo dużych projektów, a także zyskał sporo praktycznej i szczegółowej wiedzy na tematy związane z różnymi składowymi programowania. Generalnie będzie technicznie, praktycznie, szczegółowo i niskopoziomowo - czyli dokładnie tak jak lubię i do czego (jak sądzę) przyzwyczaiłem czytelników mojego bloga.
W sumie krótki news: przed chwilą zaczął się SECURE 2014/CTF - entry-level, 5 zadań, 45h. Zachęcam do zabawy (są też nagrody) - http://ctf.secure.edu.pl/.
[TL;DR: PDF/EPUB] W poprzednim poście wspominałem o moim opisie rozwiązania zadania Remote KG z Pwnium CTF 2014, który został opublikowany w Strefie CTF magazynu Programista. Wspominałem też, że było to jedno z najbardziej oryginalnych zadań z jakimi miałem okazję się spotkać. Redakcja Programisty zdecydowała się dzisiaj udostępnienie za darmo wspomnianego write-upu :)
Jak zwykle latem panuje CTFowa susza (co zmieni się pod koniec roku) i CTFy ograniczają się w zasadzie do finałów offline. Ostatnio były dwa w których braliśmy udział - Nuit du Hack CTF Finals 2014 w Paryżu oraz DEF CON CTF 2014 w Las Vegas, NV. Oba CTFy były w formacie Attack-Defense (w którym mamy sporo mniej doświadczenia niż w Jeopardy w które zazwyczaj gramy), ale udało nam się wywalczyć, kolejno, czwarte oraz trzecie miejsce. Niniejszy update poświęcony jest wyłącznie DEF CON CTF.
Jak zapewne niektórzy czytelnicy pamiętają, "Diabeł tkwi w szczegółach" to m.in. tytuł mojej serii artykułów z pogranicza programowania i bezpieczeństwa publikowanych w magazynie Programista. Dwie pierwsze części (poświęcone C/C++) udostępniłem do pobrania już wcześniej (C/C++, cz.1, C/C++, cz.2), czas więc i na część trzecią. Jest ona dla odmiany poświęcona problemowi przechowywania i udostępniania plików otrzymanych od użytkownika (atakującego) przez aplikacje webowe. A tak na marginesie, jeśli myślicie o wykupieniu prenumeraty Programisty, to do jutrzejszego wieczoru do prenumeraty redakcja dorzuca ebook jednej z dwóch książek ("Android w praktyce. Projektowanie aplikacji" lub "SCRUM i nie tylko. Teoria i praktyka w metodach Agile.").
Semi-regularny post o tym, co tam słychać w naszym teamie CTFowym. TL;DR: top1 na finałach PHDays w Moskwie; top2 na kwalifikacjach do DEF CON CTF; na CONFidence odbył się nasz CTF, wygrała liub rozwiązując 12 zadań; również na CONFidence z j00ru mówiliśmy o CTFach; sponsorzy nadal mile widziani.
Wczoraj późnym wieczorem w Krakowie na ósmej edycji Nocy Informatyka odbyła się moja prelekcja pt. "Food for thought. Kilka przemyśleń na temat bezpieczeństwa IT.". Poniżej znajduje się link do slajdów (jeśli ktoś widział moją prelekcję na Wheel Evening w Warszawie w kwietniu, to zaznaczę tylko, że slajdy przeszły bardzo gruntowną przebudowę). Standardowo, feedback mile widziany.
Pod koniec ubiegłego roku odezwało się do nas (tj. do mnie i j00ru) wydawnictwo PWN z propozycją napisania artykułu/raportu o ciekawych błędach popełnianych przez programistów. Jak wiecie, błędami zajmujemy się na co dzień, każdy z nas wygrzebał trochę swoich ulubionych anegdot i klas bugów, i stworzyliśmy coś, co ostatecznie przyjęło formę 40-stronicowego eBooka. Owy artykuł/mini-książkę można pobrać za darmo (registration-walled) na nowo otwartym serwisie IT PWN w dziale Download. Zachęcamy do lektury :)
Kolejny semi-regularny post o tym, co tam słychać w naszym teamie CTFowym. TL;DR: jutro (sobota 26.04.2014) o 9:00 czasu polskiego rozpoczyna się nasz teaser CTF; ostatnie wyniki: PlaidCTF - TOP2, Nuit Du Hack CTF Quals - TOP1, CODEGATE CTF Finals (Seul, Korea) - TOP3, Volga CTF Quals - TOP1; na naszym blogu pojawiło się trochę write-upów, a także kolejny został opublikowany w Programiście; poza tym nadal szukamy sponsora.
W ubiegły czwartek udaliśmy się do Genewy na Insomni'hack (wspominałem o nim przy okazji innego wpisu) - offline'owy CTF w stylu jeopardy z drużynami ograniczonymi do maksymalnie ośmiu osób. Nasz Dragon Sector reprezentowali j00ru, valis, Keidii, Redford, q3k, mak, tkd, oraz ja (patrz zdjęcie na dole postu). Podczas prawie dziesięciogodzinnej batalii (od około 18:30 do 4:00 w nocy) udało nam się najpierw wywalczyć przewagę, a następnie utrzymać ją do końca, zajmując ostatecznie pierwsze miejsce! Przy okazji wykorzystam ten post do innych update'ów związanych z DS.
Od mojego ostatniego wpisu mineło jedynie dziesięc dni, a już odbyły się dwa CTFy w których wzięliśmy udział: szwajcarski Insomni'hack Teaser oraz humorystycznie nazwany rosyjski Olympic CTF Sochi 2014. Oba CTFy wygraliśmy :)
Pierwszego lutego ubiegłego roku założyliśmy z Mateuszem Jurczykiem i Adamem Iwaniukiem team CTFowy "Dragon Sector". Wczoraj minął rok naszej regularnej gry i jest to dobry powód by coś o tym napisać.
Nowy numer magazynu Programista - 11/2013 (18) - jest już dostępny, a w nim m.in dwa nasze artykuły ("Bliżej Silikonu #2" oraz "Zdobyć flagę..."). A tak poza tym jest to wydanie rozszerzone (144 strony), z masą ciekawych tematów.
Wczoraj wieczorem, zainspirowany pewną dyskusją na IRCu, spróbowałem zrobić funkcję do konwersji 8-bitowej liczby (unsigned char) na string będący reprezentacją bitową tej liczby (i.e. 0xF3 → "11110011"). Oczywiście to bardzo prosta sprawa - w zasadzie jest to jedno z podstawowych ćwiczeń, z którymi sobie radzą nawet bardzo początkujący programiści. Więc... czemu by sobie nie utrudnić zabawy? Dorzuciłem więc założenia: nie może być pętli (nawet rozwiniętej), musi wyglądać matematycznie, oraz w miarę strasznie/nieczytelnie (funkcja pisana w okolicy halloween ;>). I nawet się udało.
Kilka mniejszych spraw się uzbierało, więc postanowiłem je ubrać w posta i wrzucić tutaj. Po pierwsze, przegapiłem dwa ostatnie numery Programisty, a jest tam kilka fajnych rzeczy o których chciałem wspomnieć. A po drugie, po ponad pół roku istnienia chciałem coś więcej wspomnieć o naszym teamie CTFowym - Dragon Sector (w tym o blogu na który wrzucamy write-upy).
Przed chwilą wrzuciłem na youtube video z mojej prelekcji z SEConference 2013, z dnia drugiego (o CTF, etc). Prelekcję z dnia pierwszego (o ZIP, etc) wrzucę w przeciągu paru dni. Pozostając przy tej tematyce, parę dni temu na mój kanał wrzuciłem też dwa podcasty o tym jak rozwiązać dwa zadanka z poprzedniego CTF - SIGINT 2013 - konkretniej crash oraz punchcard; linki poniżej.
Raz jeszcze o nowym wydaniu Programisty - na forum 4programmers.net został udostępniony fragment naszego artykułu - "Bliżej silikonu #1" - o niskopoziomowych sprawach w x86. Do tego dostałem info o kolejnej promocji od redakcji (ważna do dzisiaj), więc i to wrzucę - a nuż ktoś się skusi (full disclosure: nie, nie dostaje procentu od nagonionych klientów hehehe). Ah, no i jeszcze drobna errata poniżej (spotted by vpiotr - thx!).
Przed chwilą wrzuciłem na YouTube drugą część videotutoriali o wielowątkowości. Odcinek trwa niespełna 40 minut i powinien zainteresować zarówno osoby początkujące, jak i zaawansowane - dość głęboko wgryzam się w nim w internalsy (pozostając jednak w usermode), szczególnie dotyczące różnic między CreateThread a _beginthreadex. Tak więc zachęcam do rzucenia okiem.
Heads up! Dzisiaj (w wersji elektronicznej, a w piątekweekend w Empikach) wychodzi nowy numer magazynu "Programista", w jubileuszowej, 140-stronicowej formie. Numer ten jest dla mnie szczególny również z innego powodu - pojawi się w nim artykuł "Bliżej silikonu #1", czyli pierwsza część naszej (tj. mojej oraz Mateusza "j00ru" Jurczyka) niskopoziomowej serii z pogranicza osdev/assemblera/low-level internals (o której już wspominałem).
Wczoraj wczesnym wieczorem skończyła się w Krakowie konferencja SEConference, o której jużwspominałem. Było 10 prelekcji (w tym dwie moje - linki do slajdów są niżej) + lightning talk * 2 + nieprzewidziany kolokwio-konkurs który pomagałem przygotować/prowadzić z nagrodą w postaci wejściówki na CONFidence (bardzo miły gest ze strony organizatorów CONFidence!). Ogólnie konferencja, jak na niewielką kameralną imprezę, wypadła bardzo przyjemnie.
(collaborative post by Gynvael, oshogbo & xa) W Siedlcach odbyła się co roczna konferencja Inżynierii Gier Komputerowych (IGK) - tym razem była to jubileuszowa, 10siąta, edycja. I jak co roku było teamowe compo - 6.5h (ostatecznie przedłużone o jeszcze godzinę) na zrobienie gry na zadany temat w maksymalnie 4 osoby. Tematem było "Artillery Game" (więcej poniżej), a alians Vexillium + Dragon Sector (reprezentowany przez 6 osób na IGK) wystawił dwa teamy po 3 osoby (pod nazwami "Bad Sectors" oraz "Dragons"). Ostatecznie obu naszym teamom udało się stworzyć w pełni działające i ukończone gry (bugi przemilczmy ;p), i zając pierwsze oraz piąte miejsce na 12 drużyn. W niniejszym poście chcieliśmy coś napisać o grze naszego teamu z pierwszego miejsca (w składzie: code: gynvael+oshogbo, gfx: xa), a także udostępnić grę w wersji post-compo (razem ze źródłami na MIT i grafiką na CC) oraz port gry na HTML5 który zrobił Xa w ciągu ostatnich paru wieczorów. Miłej lektury (tak, są obrazki) :)
Być może niektórzy moi czytelnicy pamiętają zabawę "Pocztówka z Doliny Krzemowej" o której pisałem mniej więcej rok temu. Będąc w październiku ubiegłego roku ponownie w Kalifornii wysłałem kolejną porcję pocztówek dla zainteresowanych osób. Pół roku minęło i jedynie 3 z 10 pocztówek udało się rozszyfrować. Być może ktoś spośród moich czytelników będzie zainteresowany podjęciem wyzwania i spróbowania swoich sił z pozostałymi pocztówkami :)
Tak przeglądam ranking ogólny CTFów prowadzony przez serwis CTFtime.org i zwróciłem uwagę na jedną rzecz (a raczej jej brak) - w setce pierwszych teamów w rankingu 2012 nie ma żadnego polskiego teamu, a w br. jest jeden (słownie: jeden). Wydało mi się to dość dziwne - jest kilka polskich sajtów z newsami o security (szczególnie ostatnio wyrastają jak grzyby po deszczu), kilka(naście?) forów internetowych (czasem mam wrażenie, że po każdej emisji Hackerów w TV powstają dwa nowe), są też konferencje security (przynajmniej kilka w roku), sporo niezłych blogów, czasem jakieś konkursy/hackme/crackme/etc i ogólnie sporo udzielających się osób "na scenie" - więc skąd taka marna reprezentacja w rankingu CTFów? Odpowiedzi może być oczywiście kilka. Jedną z nich (całkiem możliwą zresztą) jest: jakoś tak nikt nigdy nie napisał o tym, że średnio co dwa tygodnie jest jakiś CTF i że w ogóle jest jakiś "ogólny ranking".
Mój artykuł zaczynał się od następujących słów: "Programując w językach C lub C++, bardzo łatwo jest popełnić błąd." - jak można się domyślić po tytule postu, słowa okazały się prorocze i faktycznie kod jednego z listingów w artykule jest błędny. Kudos za wypatrzenie błędu dla KrzaQ!
Jak niektórzy moi czytelnicy zapewne pamiętają, w sierpniu ubiegłego roku w magazynie Programista ukazał się mój artykuł pt. "Diabeł tkwi w szczegółach: C/C++ (część 1)". Dzisiaj zdecydowaliśmy się, wspólnie z redakcją, udostępnić go za darmo w formie PDF (link poniżej). Dodatkowo, redakcja Programisty przygotowała pewien bonus gdyby ktoś z moich czytelników skusił się na prenumeratę.
Mając wolną chwilę, np. w drodzę do/z pracy, zazwyczaj przeglądam RSSa i wysyłam sobie co ciekawsze linki na maila, w celu obejrzenia (przeczytania) danego znaleziska dokładniej przy okazji kolejnej, dłuższej, wolnej chwili. Od listopada zeszłego roku, dla wygody (łatwiej filtry ustawić), zamiast na swój prywatny mail wysyłam je na grupę dyskusyjną (mailingową) ciekawe-papierki@googlegroups.com, którą specjalnie do tego celu stworzyłem. I w zasadzie nie ma żadnego powodu dla którego ta grupa miała by nie być publiczna - a nuż ktoś jeszcze znajdzie w tych linkach coś dla siebie.
Zacznę od tego, że w obecnym numerze Programisty, czyli 1/2013 (08), ukazał się mój kolejny artykuł z serii "Diabeł tkwi w szczegółach" o tytule "hosting plików" (strona 34). Tekst leży na granicy między projektowaniem serwisów internetowych a IT security i traktuje o tym jak bezpiecznie odebrać plik od użytkownika (w szczególności: plik graficzny), a następnie serwować via HTTP. Artykuł jest w zasadzie przedyskutowaniem różnych stosowanych, nie zawsze dobrych, metod, oraz wskazaniem kilku, które faktycznie mają pewien sens. Reszta niniejszego postu będzie bardzo krótko o obecnym numerze programisty, oraz o nadchodzącej serii artykułów o programowaniu/IT niskopoziomowym, która będzie współtworzona przeze mnie oraz Mateusza "j00ru" Jurczyka.
W RSSie mojego bloga ostatnio pusto, szczególnie po polskiej stronie lustra, niemniej jednak trochę zmian ostatnio wprowadziłem. W skrócie: pojawił się dashboard (widoczny po wejściu na http://gynvael.coldwind.pl/), oraz wprowdziłem "notatki" (głównie techniczne), których przybywa, a które to nie pojawiają się w RSS. Więcej o tym co jest co w dalszej części tego posta.
Dwa krótkie ogłoszenia. Po pierwsze, wyszedł nowy numer magazynu Programista z moim artykułem. A po drugie, wygląda na to, że Helion przygotowuje polskie wydanie "The Tangled Web" Michała Zalewskiego. Więcej w treści postu...
Several months ago, we started an internal Google Security Team effort to improve the general security posture of the Chrome embedded PDF reader, in an approach similar to the Flash fuzzing performed several months ago by Tavis Ormandy. During the course of a few weeks, we built a solid corpus of PDF documents that we feel gets significant coverage of the Chrome PDF Reader’s code base and used it to shake out more than 50 low-to-high severity bugs. All of the high and critical severity bugs we discovered have been fixed in the stable channel [1] [2] [3] as of this posting; see examples: ...
Mniej więcej miesiąc temu wrzuciłem na bloga recenzję nowego drukowanego czasopisma Programista, a tu już nowy numer. Póki co wrzucam spis treści, a ewentualną recenzję wrzucę jak dojdzie do mnie papierowa wersje i ją przestudiuje :)
Czasem przyjemnie jest zapomnieć o Undefined Behavior w C i po prostu napisać coś co działa tu i teraz, a niekoniecznie będzie działać jutro (przy nowej wersji kompilatora; innych opcjach kompilacji) lub w innym miejscu (innej platformie). Kilka tygodni temu nadarzyła się ku temu okazja za sprawą tematu na pewnym forum zatytułowanym "Hello world bez bibliotek i asm" (stąd nazwa niniejszego postu) - autor pytał czy możliwym jest napisać w C "Hello World" bez użycia bibliotek (w tym include'ów) ani wstawek assembly (w dowolnej formie). O ile na początku topic był powiązany jeszcze z poprawnym językiem C, to dość szybko przeszło na kod bardzo niskopoziomowy (zapisany nadal w C), zależny od danego systemu, architektury CPU czy nawet sposobu kompilacji użytego przez kompilator. Poniżej zamieszczam mój pomysł na wypisanie "Hello World" na konsoli GNU/Linux, natomiast zachęcam również do rzucenia okiem na sam topic (link powyżej).
Gdy zaczynałem programować (a było to około roku 1990) głównymi materiałami do nauki były nieliczne ksiażki oraz kilka czasopism traktujących głównie lub m.in. o programowaniu. Jeśli chodzi o te ostatnie, to było ich zaskakująco dużo (szczególnie porównując z obecną sytuacją). Wymienić mogę kilka:
DLL shared sections have long been infamous for introducing security problems. A few months ago I decided to take a look if one can still find applications that use PE modules with shared sections in an insecure way (or using them at all). Today I'm releasing research notes, some tools and a demo of a Cygwin local privilege escalation (it's already fixed).
IGK is an annual game development conference in Poland and quite a fun one at that (not that I've been at many gamedev conferences). This year it started 29 of March and ended 1 of April in the evening (if counting the unofficial annual afterparty that is). The conference consists of a series of talks in the first two days and a 7 hours team gamedev compo. This year, as last year, I both had the opportunity to give a talk and to start in the compo, with quite decent results (for someone not really involved in game dev anymore).
Some time ago I've learned that you could connect two joysticks to the one-joystick-port CPC464 (you know, the old 8-bit computer I've already mentioned infewposts). So, I decided to practice my electronic skill, dig into the topic and make myself whatever piece of hardware is required to actually make two-joystick connection possible. Today I've finished the "1-to-2 joystick port splitter" and decided to document both the project, as well as the problems, the solutions, and the failures.
Będąc w styczniu w Mountain View wysłałem do kilku znajomych (jak i mniej znajomych) pocztówki. Z wrodzonej przekory niektóre wiadomości umieszczone na pocztówkach zaszyfrowałem - część przy pomocy kartki i długopisu, a część przy pomocy trochę bardziej skomplikowanych narzędzi. W każdym razie dzięki uprzejmości odbiorców pocztówek na sieć trafiły skany większości z nich - zachęcam więc do spróbowania swoich sił i połamania szyfrogramów w "pocztówkowym wyzwaniu Gyna" ;>
Jak pisałem wcześniej w poście "Krótki news dot. podcastów", pierwszy miesiąc tego roku spędziłem w USA, a konkretniej w Krzemowej Dolinie. Niniejszy post jest odpowiedzią na pojawiające się prośby o "jakąś relację" ;>
Wrzuciłem na sieć nowy podcast (videocast?) o Maszynach Wirtualnych. Trochę technicznie, trochę popularno-naukowo, i trochę praktycznie - ostatnie 30 minut to pisanie prostej VMki (dodam, że podcast wyszedł długi i ma półtorej godziny).
Z uwagi na wydarzenia bliskie losowym dostałem do recenzji (a w zasadzie do analizy merytoryczno-techniczno-różnej) video tutoriale + książkę "Bezpieczeństwo Aplikacji Windows" wydawnictwa CSH znanego z [nie]sławnej serii "Szkoła Hakerów". Recenzję stworzyłem (zeszło na to około 30 godzin pracy) i dzisiaj ją publikuje.
TL;DR: Po pierwsze: config do gVim'a o który trochę osób pyta jest tutaj: http://gynvael.vexillium.org/dump/_vimrc (pod *nixami trzeba zmienić czcionkę, etc). Po drugie: publikacja epsa o Magus Ex Machina odsunie się o jakieś dwa miesiące (problemy techniczne). Więcej poniżej...
Pojęcia "przepełnienie stosu" oraz "przepełnienie buforu na stosie" są dość często używane zamiennie. Niestety, jest to nieprawidłowe - są to dwie zupełnie różne klasy bugów, których nie należy ze sobą mylić. Niniejszy post ma na celu wykazanie różnicy, a także luźne rozważania na temat genezy błędu.
W skrócie: 1. Wrzuciłem mniej więcej uporządkowaną listę serii/odcinków podcastów (link w menu po prawej). 2. Od początku stycznia do połowy lutego 2012 nie będę niestety w stanie nagrać żadnego podcastu - publikacje wznowie w drugiej połowie lutego.
W zasadzie ten post jest po angielsku, ale po polskiej stronie lustra chciałem zapytać osoby zainteresowane moimi video tutorialami z serii Gamedev: Czy chcielibyście posłuchać coś więcej o budowie/tworzeniu Magus Ex Machina (w postaci videocastu z serii Gamedev)?
Kilka godzin temu premierę miała nowa książka Michała Zalewskiego (znanego bardziej jako lcamtuf) - "The Tangled Web". Miałem to szczęście, że mogłem książce przyjrzeć się jeszcze przed premierą, więc korzystając z premiery w końcu coś o niej krótkiego napiszę.
Krótki wpis z dwoma "newsami". Po pierwsze: link do mojego profilu na Google+ (czasem wrzucam tam coś merytorycznego, co nie trafia na bloga). A po drugie: wrzuciłem 6 nowych videotutoriali na YT (o gamedevie, czyli programowaniu gier).
"Nie ma to jak dobry bike shed, żeby rozruszać bloga" - to stwierdzenie uknułem (razem z j00ru) jakiś czas temu, po zapoznaniu się z tytułowym prawem trywialności parkinsona i naniesieniu go na ilość komentarzy na moim blogu vs tematyka danego postu. Moim zdaniem jest to jedno z ciekawszych praw jeśli chodzi o prowadzenie bloga i może zainteresować szczególnie osoby prowadzące (lub chcące prowadzić) bloga/blogi w celach zarobkowych.
Przez przypadek wpadła mi w ręce ostatnio recenzja gry Perihelion - jest to wydana w roku 1993 gra RPG na Amigę. Z uwagi na ówczesne ograniczenia, autorzy gry dysponowali jedynie paletą 32 kolorów i muszę przyznać, że sposób w jakie wykorzystali te 32 kolory mi zaimponował. Konkretniej: złożyli paletę z dwóch "gradientów": szarego i pomarańczowego, co dało kapitalny efekt (screeny poniżej). Anyway, efekt spodobał mi się na tyle, że stworzyłem krótki programik, który konwertuje dany obrazek własnie do takiej palety 32 kolorów.
Kilka razy obiło mi się o uszy stwierdzenie typu "żeby być dobrym z programistą/informatykiem trzeba być dobrym z matematyki", jak i również nie raz trafiały do mnie pytania w stylu "czy jak z matematyki mam [ocena poniżej 5] to mam szansę zostać informatykiem/programistą?" (czasem w formie zawstydzonego-przyznania-się-do-winy typu "ale wiesz, ja z matmy mam [ocena poniżej 5]"). Ponieważ o temacie przypomniał mi komentarz noname pod ostatnim postem ("czy matematyka jest obecna ( a jeśli tak, to w jakim stopniu?) w Twojej codziennej pracy?"), postanowiłem przedstawić mój punkt widzenia.
NetSock to lib/wrapper ułatwiający obsługę socketów w C++, który stworzyłem 4 lata temu (albo 5, przyznaję, że nie pamiętam dokładnie) i update'uje od czasu do czasu. W sumie można było go ściągnąć z innymi moimi projektami (np. ostatnio opublikowanym PiXiEServ), ale nigdy nie miał swojej własnej oficjalnej premiery.
Wygląda na to, że transport Jabber<->GG z którego korzystałem (gg.jabber.wroc.pl) zostanie permanentnie wyłączony w nadchodzący weekend. W związku z powyższym, nie będę już niestety osiągalny via gg.
A few years back, we've been (i.e. j00ru and Gynvael) working on a bootkit-related project (some polish SecDay'09 presentation slides can be found here: Bootkit vs Windows.pdf). One of its basic requirements was the ability to load custom boot-"sectors" from an external host in the local network. Since the publicly available solutions required too much time to be spent on configuration and we didn't need most of the offered functionality anyway, we decided to create an extremely simplified Preboot Execution Environment (PXE) server on our own, and so PiXiEServ came to be. Actually, a great majority of the source code was written by Gynvael, with only few modifications applied by me (i.e. j00ru).
The interesting difference between ASCII and Unicode is that the first had only one group of digits defined (30h to 39h), and the latter defines 42 decimal digit groups (I think it actually defines more, but nvm). A common programming language operation is to convert a sequence of digit-characters (yes, a number) to a machine-understandable integer. Does any default in-language string-to-integer support Unicode digits? Does any is-digit function return true on Unicode digits? Well, I did some checking and created a table (programming language/version/library vs digit group) that addresses these questions.
In march I've published some research related to Just another PHP LFI exploitation method that used the fact that the PHP engine stores (on disk) uploaded files (rfc1867) for a short period of time, even if scripts don't really expect them. The bottom line was that it's easy to exploit it on Windows, but on *nix it wasn't really possible unless some php script leaks certain information (temporary file name). Well, Brett Moore in his paper "LFI with phpinfo() assistance" pointed out that phpinfo() is the thing you want to look for on *nix.
Niecałe trzy lata temu opublikowałem post pod tytułem "Wolność dla wszystkiego, czyli kompletne anihilowanie pamięci procesu", który był opisem próby uwolnienia wszystkich regionów pamięci należących do danej Windowsowej aplikacji, z poziomu tejże aplikacji. Wczoraj dostałem maila od raphael<AT>gfreedom<DOT>org z opisem (udanej) próby wykonania podobnego eksperymentu pod systemem opartym o jądro Linux. Dostałem również zgodę na opublikowanie jego maila w formie postu gościnnego, co niniejszym czynie.
For various reasons I've decided to take a deeper look at the evolving HTML 5 standard and related new HTTP extensions (or proposals of extensions). To tell you the truth, I was extremely surprised about the number of HTML tags that I didn't even hear of (like <ruby>, <kbd>, <meter>, <progress>, etc). Another thing that surprised me were a few security features I was not familiar with... so I decided to write down what I found interesting (so yes, this is a 'data dump' only).
Zupełnie out-of-order nagrałem dodatkową miniserię podcastów (a w zasadzie videocastów) o pointerach (wskaźnikach) w C/C++. Seria trwa łącznie ponad 4 godziny i jest rozbita na 8 odcinków, w których staram się pokazać/wytłumaczyć czym jest pointer (adres+metadane), jakie narzędzia na poziomie składni udostępnia język do operowania na pointerach, jak i po co castować pointery (jest i krótka dygresja o strict aliasing rule), po co ich używać, a także jak napisać programik który wylistuje regiony pamięci używane przez aplikację.
I never given too much thought to the problem of initialization of a in-function static variable in C/C++ (mostly C++ though). I just blindly assumed that the static variable works identically to a global variable, but is directly accessible (using language provided means) only in the block of code (and its child blocks) in which it was declared/defined. This is partly true of course - the big difference is that the global variable is initialized either at compilation time (constant) or before the entry point, and the static variable is initialized either at compilation time (constant) or at the first entry to the block of code where it's declared/defined. The interesting parts here are "how does the variable know if it has been initialized" and "what about concurrent multi-threading?" (the latter has some minor stability/security consequences). Let's take a look at GCC and Microsoft Visual C++ and how do they handle these issues...
Minęło 10 miesięcy od kiedy przeprowadziłem się do Konfederacji Szwajcarskiej i uznałem ten fakt za dobrą wymówkę żeby wrzucić kilka fotek, i kilka przemyśleń, na temat mieszkania w Szwajcarii.
Some time ago I had a crazy/funny idea for a local privilege escalation: run a privilege granting operation in an infinite loop and wait for a random bit flip in CPU/RAM that would make a 'can this user do this' check return 'true' instead of 'false'. Is this theoretically possible? Yes. And practically? Almost impossible, due to the unlikeliness of a bit flip and even more, the unlikeliness of a bit flip in the just right place. Nevertheless, I thought this idea was quite interesting and decided to dig into the topic. This post will summarize what I've found out and mention a few papers/posts might be worth reading.
A few years ago I would answer the above question with "because NULL is defined as a void pointer to 0", which is only half correct (and close to being wrong). The answer to this question is much more complicated and thus much more interesting.
Early Sunday morning discussion has resulted in j00ru coming up with an idea to mitigate some variants of kernel exploitation techniques by introducing a CPU feature that would disallow execution control transfers in kernel-mode to code residing in user memory area pages (e.g. addresses < 0x80000000 on a 32-bit Windows with default settings). The idea was that the system would mark every page as either being allowed to execute code in ring-0 or not. And hey, guess what... Intel has already proposed such a feature a month ago! Furthermore, it seems that this exact idea was already described in 2008 by Joanna Rutkowska, and two days ago she has published a follow up post on her blog.
Od początku istnienia tego bloga staram się (tj. nie zawsze to wychodzi) wszystkie posty wrzucać dwóch językach - polskim, oraz angielskim. Niestety, z powodów czasowych, muszę trochę zredukować ten zakres. W związku z czym, od teraz tylko część postów będę publikował w obu językach. Pozostała część będzie publikowana albo tylko po polsku (posty edukacyjne) albo tylko po angielsku (posty techniczne/związane z moimi badaniami).
O ile nie uważam siebie za gadżeciarza, to co jakiś czas jakiś nowy "kawałek elektroniki" wpada w moje ręce. Tym razem było to tzw. pióro cyfrowe (digital pen; w skrócie: długopis który zapamiętuje to co piszesz i pozwala "wrzucić to na kompa") firmy I.R.I.S. (a przynajmniej taka firma była podana na pudełku). Co ciekawe, udało mi się dorwać SDK do tego urządzonka, więc post będzie również spojrzeniem na digital pen od strony programistycznej (bez przesadnych technikaliów).
Dokładnie 10 dni temu napisałem, że zaczynam publikować na YT nowe serię videocastów (videotutoriali). Przez te 10 dni wrzuciłem trochę nowych epsów (około piętnaście) i w zasadzie zaczęło się klarować co i jak będę nagrywać.
Dwa tygodnie temu pisałem o konkursie zorganizowanym przez serwis Security News (https://www.secnews.pl), a w którym do wygrania była wejściówka na konferencję CONFidence 2011. Konkurs polegał na stworzeniu ciekawego CrackMe, które następnie oceniane były pod względem trudności (ale musiały być rozwiązywalne), pomysłowości, innowacyjności oraz walorów wizualnych. Wczoraj późnym wieczorem zostały ogłoszone wyniki i wygląda na to, że wygrał team w składzie j00ru+ja. Yaay! :)
Pod koniec kwietnia odwiedziliśmy z żoną Polskę. Jedną z atrakcji w tym nadwiślańskim kraju okazał się bankomat Euronetu, który po otrzymaniu szwajcarskiej karty zaproponował mi "Gwarantowany Kurs Wymiany Walut". W skrócie: coś czuje, że ktoś kogoś chce zrobić "w lewo" (konkretniej: Euronet mnie w tym wypadku)...
ReverseCraft zawisł już jakiś czas temu w niepewności. Z jednej strony chciałem go kontynuować, z drugiej strony wiedziałem, że po prostu nie mam na to czasu (przygotowanie 45-minutowego epsa trwało od 5 do 10 godzin). Postanowiłem więc oficjalnie zakończyć serię ReverseCraft, ale jednocześnie rozpocząć nową serię videocastów.
Simplified Assembly Loader to prościutki programik (napisany zresztą "na kolanie" w niecałą godzinę) którego zadaniem jest ułatwienie rozpoczęcia nauki assembly x86 pod win32 i "linuxami". Będę z niego korzystał w kursie assembly który planuje wrzucać na youtube). Jak każdy mój tool, asmloader jest open source (tym razem licencja MIT, dla odmiany).
Zazwyczaj instrukcje assembly są bardzo niskopoziomowe, tj. pozwalają wykonywać pojedyncze operacje arytmetyczne, logiczne, kopiowanie pojedynczych bajtów/wordów/etc i nic więcej - tak więc pierwszą rzeczą z którą muszą się oswoić osoby wchodzące w assembly, jest fakt, że to co można było zapisać w jednej linii np. w C, w assembly zajmie kilka-kilkanaście. I z jakiegoś dziwnego powodu do tego prostego świata assembly x86 zawędrował zestaw instrukcji PCMPxSTRy (SSE 4.2, dostępny m.in. na Intel Core i5/i7/etc), który jest bardziej wysokopoziomowy niż niejedna funkcja w standardowej bibliotece C.
Pewnie kojarzycie moją ulubioną konferencje security w .pl - CONFidence? Wygląda na to, że znajomy na swoim serwisie zorganizował bardzo ciekawy konkurs (trzeba stworzyć fajne CrackMe) w którym można wygrać wejściówkę na wcześniej wspomnianą konferencję.
Ostatnio trochę zajmowałem się trochę różnymi podejściami do problemu kodowania i operowaniu na liczbach całkowitych i naturalnych w programowaniu. Niniejszy post stanowi podsumowanie tego czego się dowiedziałem oraz dodatkowo, drobny rancik na temat C/C++ (innym językom dostanie się, być może, rykoszetem).
[Post gościnny by mulander] 12 listopada 2009 roku Gynvael napisał o swoich pierwszych wrażeniach dotyczących języka Go. Po upływie ponad roku napomknąłem autorowi, iż ciekawym tematem byłby analogiczny post na temat języków Digital Mars D oraz Mozilla Rust. Cała ta sytuacja przypomniała mi o pierwotnym poście i nakłoniła do odświeżenia lektury. Natknąwszy się na zdanie "Po za tym szkoda trochę, że język jest jeszcze niedostępny na platformę Windows." stwierdziłem, że warto sprawdzić jak sprawy się obecnie mają.
Dokładnie 25 lat temu (31 marca 1986) na "sieć" (mowa ofc o BBS) trafiła pierwsza wersja niniejszego bloga. Niniejszy post ma na celu podsumowanie tychże 25 lat mojej blogowej działalności - zachęcam do lektury!
Parę dni temu, podczas dyskusji ze znajomym (hi Felix ;>) o metodach exploitacji Local File Inclusion w PHP, wpadł mi do głowy pomysł, żeby użyć w tym celu tymczasowych plików tworzonych przez engine PHP podczas uploadu plików (to nie jest tożsame z include'owaniem uploadowanych plików ofc). Przerzuciłem pomysł na papier (w postaci artykułu), po czym okazało się, że w zasadzie ta metoda jest znana w niektórych kręgach. Niemniej jednak, ponieważ nie jest to "common knowledge" (w przeciwieństwie do np. include'owania logów apache czy /proc/self/environ), zdecydowałem się i tak opublikować owy art.
Post jest przeznaczony dla początkujących programistów (część o kodowaniu może zainteresować również bardziej doświadczone osoby). Planowałem go napisać już jakiś czas temu, przy okazji kolejnego pytania kolejnej osoby, które brało się z niepełnego zrozumienia czym jest zmienna/stała, a konkretniej np. nierozróżnienia wartości zmiennej od reprezentacji wartości, a także od kodowania i zapisu zmiennej w pamięci. Niniejszy post ma na celu wyjaśnienie wspomnianych różnic.
W listopadzie na Code Project pewien chiński hacker opublikował "exploit omijający UAC", który, jak się okazało, z UAC nie miał dużo wspólnego - był to 0day na win32k.sys (czyli część kernela Windows odpowiedzialna za grafikę/okienka/etc). O sprawie napisano na Niebezpieczniku, zaznaczając, że błąd jest exploitowalny pod Windows 7, Vista oraz Windows XP. Umieszczenie w newsie XPka spowodowało wywiązanie się w komentarzach dyskusji (chociaż waham się przy użyciu tego słowa) w której kilku czytelników zwróciło uwagę, że błąd nie jest exploitowalny pod XP, a więc autor newsa wprowadza czytelników w błąd. Problemem pod XP okazały się, nieobecne na Vista i 7, stack cookies (a konkretniej /GS cookies), które powinny skutecznie uniemożliwić exploitacje. Postanowiliśmy z j00ru wgłębić się w temat, czego efektem jest prawie 40-stronnicowy artykuł zlinkowany poniżej.
Tytułową zagadkę dostałem od furia i uznałem na tyle ciekawą, że przez kilka kolejnych dni rozdawałem ją na prawo i lewo. Zagadka jest o tyle ciekawa, że są tam dwa Undefined Behaviour w jednej krótkiej linii. Obecność UB powoduje oczywiście, że nie ma jednej dobrej odpowiedzi; odpowiedzi tak naprawdę są trzy: 11, 12 lub 13.
Osoby zajmujące się zawodowo hackingiem (w szczególności pentesterzy czy security researcherzy) mogą pominąć niniejszy post (chyba, że chcą dodać sugestię od siebie, takowe są baardzo mile widziane) - nie sądzę by znalazło się tu dla was coś nowego bądź zaskakującego. Post skierowany jest przede wszystkim do osób zainteresowanych hackingiem, ale nie związanych z nim w sposób formalny.
Dyskutując wczoraj m.in. z apsem o pewnym kawałku kodu natrafiliśmy na ciekawą (moim zdaniem) różnicę w implementacjach funkcji atoi, [sf]canf %i oraz strtol (z której btw w niektórych implementacjach korzystają [sf]scanf oraz atoi) między msvcrt (Microsoft C-Runtime Library), glibc (GNU C Library), a libc używanym na OSX.
Wraz z rozpoczęciem cyklu ciekawostek założyłem sobie "notatnik" (ofc w formie elektronicznej) w którym zapisuje rzeczy które mnie zaciekawiły. Notatek zrobiło się tam całkiem sporo, więc chyba czas na kolejny post z tego cyklu.
Kilka dni temu dostałem kawałek kodu napisanego w PHP 5 oraz pytanie "czy to jest OK?". Kod zajmował się walidacją pól formularza (tj. tzw user input), a konkretniej, sprawdzał czy user input składa się tylko z liter, łacińskich (A-Z) oraz polskich liter diakrytyzowanych (czyli Ą Ż Ś Ź Ę Ć Ń Ó Ł oraz małych wersji tychże liter: ą ż ś ź ę ć ń ó ł). Dodatkowo, weryfikacji podlegała ilość wprowadzonych liter - limit był stosunkowo niewielki. Jak zapewne się już domyśliliście, kod był "nie OK", a błąd był na tyle ciekawy, iż zdecydowałem się go opisać.
Kilka dni temu, przy okazji konferencji Hack In The Box w KL, wyszedł czwarty numer Hack In The Box Magazine! Jest tam kilka ciekawych nowych artykułów, a także kilka "przedruków" z poprzednich numerów (aka Readers Choice).
Ostatnio pracuje nad pewnym kodem w C++ w którym (nad)używam sporo różnych ficzerów języka. A jeśli chce się, żeby tego typu kod na pewno działał, trzeba być pewnym tego jak zachowa się kompilator, co sprowadza się do poszukania czy dane zachowanie jest wynikiem zgodności ze standardem (tj. czy standard mówi, że dana rzecz dokładnie tak ma się zachować), zdefiniowanym zachowaniem kompilatora (tj. w dokumentacji kompilatora (w moim przypadku jest to GCC) jest zapisane, że dana rzecz dokładnie tak się zachowa, ale niekoniecznie jest to zdefiniowane w standardzie języka), czy też jest totalnym UB (czyli w żadnej oficjalnej dokumentacji nie jest dane zachowanie udokumentowane, czyli jedyne czego możemy być pewni, to to że dana wersja danego kompilatora w takim konkretnym miejscu się prawdopodobnie zachowa się tak jak zaobserwowaliśmy). Tak więc niniejszy post jest w zasadzie zapisem informacji które znalazłem o pewnym ficzerze (rozwijaniu makr przez preprocesor) i prawdopodobnie doświadczeni programiści mogą niniejszy post pominąć.
Wstępnie miała być to tylko kolejna "Ciekawostka", ale tekst się rozrastał i rozrastał, więc stwierdziłem, że jednak trzeba zrobić pełnego posta. A będzie krótko o kilku drobnych rozszerzeniach GCC których wcześniej nie widziałem, oraz trochę dłużej porantuje czego mi w C/C++ jeszcze brakuje (i nie, nie będą to szablony szablonów ;f).
Od pewnego czasu chodzi za mną pomysł, żeby publikować co kilka dni linki do artykułów/papierków/wpisów na blogach które ostatnio czytałem i wg. mnie są warte przeczytania lub po prostu fajne/ciekawe. No i pytanie brzmi, czy kogoś by w ogóle był tym zainteresowany. Zachęcam do wyrażania opinii w komentarzach.
Witam ponownie po krótkiej przerwie, spowodowanej zmianą miejsca zamieszkania, a więc i koniecznością ponownego "załatwienia" dostępu do neta. Czas na garść informacji organizacyjnych...
Dostałem dzisiaj od znajomego pewne zdjęcie, w formacie JPEG. Zdjęcie przedstawiało osobę, której twarz została zamalowana czarnym prostokątem. Nie było by w tym nic ciekawego, gdyby nie to, że explorer pokazywał na miniaturce twarz niezamalowaną :)
(Krótki i chaotyczny post napisany "w biegu") Natrafiłem na pewien problem. Mianowicie, skąd początkujący powinien się uczyć programować? Sieć jest przepełniona materiałami dot. najrozmaitszych języków programowania. Są kursy C, dokumentacja Pythona, manuale Intela do Assembly x86, książki o PHP, etc. Ale to wszystko jest o językach. I dobrze! Ale co z nauką komponowania programów (z braku lepszej nazwy przychodzącej mi do głowy)?
Po CONFidence stwierdziłem, że fajnie byłoby się pobawić różnymi starymi rozwiązaniami sprzętowo-software'owymi, typu ANTIC i P/M, HAM6, itd. Jak to osiągnąć?
Poprzedni post, tj. Wybór studiów a szanse na rynku pracy, wywołał całkiem niezłą dyskusję, zarówno na temat, jak i na różne tematy mniej lub bardziej powiązane z głównym wątkiem, np. "studia (nie) są niepotrzebne", "prawdopodobieństwo może przyjmować (nie) tylko wartości od 0 do 1", czy też temat który chciałbym dzisiaj rozwinąć - "jak udokumentować swoją wiedzę". Zachęcam do lektury, a przede wszystkim, do dyskusji!
Najczęściej ostatnio pojawiającym się pytaniem na moim mejlu/komunikatorach jest "jakie wybrać studia, żeby znaleźć później dobrą pracę". Czas chyba zająć w tej sprawie "oficjalne" stanowisko.
Na stronie konferencji CONFidence 2010 pojawiły się nagrania wideo z kilku prelekcji, m.in. z prelekcji mojej i j00ru "Case study of recent Windows vulnerabilities". Nagranie jest w formie do pobrania na dysk (tj. nie ma playera online).
Wczoraj wieczorem opublikowaliśmy (u j00ru na blogu) trochę starych advisory dotyczących PHP (nic poważnego, jakieś tam prawie nieistotne rzeczy, więc to bardziej wyniki badań niż literalnie "advisory"). W sumie nie tyle chodziło nam o znalezienie jakiś bugów w PHP (noo, trochę też, ale nvm ;p) co o przetestowanie nowej (dla nas) metody audytowania kodu.
Przeglądając ostatnio katalogi na dysku znalazłem trochę narzędzi które z jakiegoś powodu ukrywałem i do tej pory nie opublikowałem. Zastanawiam się nad dokończeniem ich podstawowej funkcjonalności i wrzuceniu w końcu na sieć. W każdym bądź razie, jednym z takich narzędzi (które prawie bez zmian nadawało się do publikacji) jest HiperDrop - prosty, konsolowy, tool do zrzucania pamięci procesu, pod Windows.
Wieczorem 12 grudnia 2006 napisałem na OpenRCE, że poszukuje pracy jako RE/programista. Po kilku godzinach otrzymałem maila od Julio Canto z hiszpańskiej firmy Hispasec z propozycją nawiązania współpracy, którą wkrótce faktycznie nawiązaliśmy. Od tego dnia minęły ponad trzy lata i dość nieoczekiwanie wyszło na to, że 19 sierpnia odchodzę z Hispasec, by 6 września rozpoczać pracę u nowego pracodawcy. Niniejszy post jest niejako podsumowaniem mojej współpracy z Hispasec, oraz podziękowaniem dla wspałniałych ludzi z którymi przyszło mi tam pracować :)
Sporo gier komputerowych (zresztą nie tylko komputerowych) z elementami RPG stosuje tzw. "skill tree" - czyli drzewko kolejnych umiejętności (zachęcam do wklepania "skill tree" w google images), które dana postać może zdobyć/poznać/posiąść. Drzewko jest zorganizowane w taki sposób, że po poznaniu danej umiejętności odblokowuje się kolejna (lub kolejne) - tak więc aby poznać umiejętność Z, być może trzeba najpierw nabyć umiejętność Y, która wymaga X. Jakieś dwa lata temu wpadłem na pomysł, żeby pomysł ten przenieść do IT (programowania/hackingu/RE) - stworzyłem sobie ogólne drzewko rzeczy które chciałbym poznać (np. architekturę ARM), a potem oddzielne drzewko szczegółowe dla każdej umiejętności z drzewka ogólnego. Co ciekawe, kilku znajomych podłapało pomysł i kilka wieczorów spędziliśmy na projektowaniu takich drzewek i dyskusji jaka kolejność jest dla nauki danej rzeczy najlepsza (lub, jak nam się wydaje która będzie najlepsza ;>).
Ostatnio do pomysłu wróciłem, a to za sprawą kilku osób, które próbowały mnie podpytać czego się uczyć (np. w kontekście C++) i w jakiej kolejności. Pomyślałem, że fajnie byłoby stworzyć trochę takich drzewek i rzucić na sieć, ot tak aby początkujący (z danej tematyki) mieli (prawie) pełen obraz czego powinni się uczyć, i jaka jest proponowana (przez osoby które już przez to przeszły, oraz samych zainteresowanych) kolejność. Niemniej jednak moja wiedza jest ograniczona, a mój punkt widzenia strikte przyczepiony do mnie (a więc zawężony do moich doświadczeń), więc projekt będzie od początku otwarty i będę zachęcał Was do udziału :)
Podczas konferencji Hack In The Box w Amsterdamie (która zaczęła się bodajże wczoraj) został opublikowany trzeci numer wskrzeszonego przez Zarula Shahrina e-magazynu HITB. Trzeci numer, najlepszy moim zdaniem od momentu wskrzeszenia zinu, jest bardzo techniczny i sądzę, że przypadnie wam do gustu. Dodam również, że nie zabrakło polskich akcentów :)
Zarówno GCC, oraz inne kompilatory, jak i same standardy języków C/C++, przewidują pewne rozszerzenia języka, które zazwyczaj adresują jakiś problem, bądź też dodają nową funkcjonalność. Tych rozszerzeń jest masa - w zasadzie każdy popularny kompilator ma niemałą listę takich dodatków, i oczywiście nie zamierzam ich wszystkich opisywać w tym poście. Wspomnę natomiast o dwóch: atrybucie init_priority dla globalnych inicjacji obiektów w GCC C++, oraz znaku dolara ($) w nazwach zmiennych - rozszerzeniu pojawiającym się w różnych miejscach. Przy okazji tego ostatniego, zaprezentuje jedno zadanie z tegorocznego testu na Technika Informatyka (który od dwóch dni krąży po sieci).
Tylko króciutki (prawie że copy-pejstowany z bloga j00ru) z oryginalnymi "advisory" dotyczącymi błędów które omawialiśmy na CONFidence (a wcześniej na Hack In The Box w Dubaju), oraz ze slajdami które używaliśmy podczas prelekcji na CONFidence (zachęcam do zajrzenia do posty z "relacją" z CONFidence). W owych "advisory" są detale które omawialiśmy na prezentacji, a także kilka dodatkowych informacji na które zabrakło czasu.
CONFidence ma jedną zasadniczą wadę - kończy się ;) Ale to w sumie dobrze - przynajmniej człowiek ma okazję uporządkować zdobytą wiedzę, na spokojnie pomejlować z nowo-poznanymi ludźmi, i wygrzebać z szafy starego poczciwego ATARI.
Post przekierowujący dla dla czytelników researchujących Windowsa: Matthew opublikował tabelki z opkodami CSRSS (względem systemu, funkcji, etc) na swoim blogu, polecam rzucić okiem: http://j00ru.vexillium.org/?p=349&lang=en :)
Co nie co o warsztatach, które prowadziłem na SEConference, pisałem już wcześniej. M.in. obiecałem wtedy podsumowanie ankiet uczestników, a do tego postanowiłem podzielić się kilkoma spostrzeżeniami.
Kiedyś moja żona wynalazła gdzieś stwierdzenie, że "ekspert to osoba która popełniła wszystkie możliwe błędy w swojej działce"* - i chyba coś w tym jest. Zauważmy, że programista na poziomie eksperckim/zaawansowanym rzadko kiedy dopytuje się "co zrobić gdy wyskoczył mi taki a taki błąd (np. kompilatora)" - on już te błędy widział, on już je kiedyś popełnił i nauczył się je rozwiązywać. Natomiast pytania od początkujących (a czasem i średnio-zaawansowanych) programistów dotyczą często właśnie tego "co zrobić gdy kompilator rzucił takim a takim błędem". Łącząc cytat z pytaniem, chciałbym zaproponować pewne ćwiczenie :)
Przed chwilą zakończyła się moja prelekcja na Hack In The Box w Dubaju, na której oczywiście być z krwi i kości nie mogłem (z uwagi na Eyjafjallajökull i odwołanie moich lotów), ale którą poprowadziłem przez telefon i stream pulpitu (ciekawe doświadczenie.. ale chyba preferuje irl prowadzić ;>). Slajdy z prezentacji udostępniamy poniżej.
W drugi dzień konferencji HITB w Dubaju został opublikowany drugi numer e-zinu HITB Magazine. Z Polskich akcentów znajdziemy tam np. artykuł j00ru pt. "Windows Objects in Kernel Vulnerability Exploitation".
Czas na jakiś bardziej techniczny post. Dostałem kilka dni temu pytanie, które pozwolę sobie zacytować: "[...] dlaczego nie powinno się deklarować zmiennych w taki sposób: int a = 50; int b[a];". Chodzi tutaj oczywiście o tablice lokalne, które mają wielkość zależną od jakiejś zmienne, być może nawet zależnej od użytkownika/wejścia. Swoją odpowiedź cytuje poniżej:
Ta sprawa "męczy" mnie już od jakiegoś czasu - coraz więcej producentów różnego rodzaju dóbr zaczyna traktować każdego KLIENTA (tj. płacącego klienta) jak potencjalnego "złodzieja", co chwilę gdzieś miga "kopiowanie tego XYZ jest przestępstwem", "modowanie urządzenia XYZ jest nielegalne", etc. Ale od początku...
O pierwszym z bugów znalezionych przez nasz team (w składzie j00ru i ja ;>) informowałem już w lutym. Dzisiaj Microsoft opublikował info o kolejnych 5 (a w zasadzie 6ściu, ponieważ dwa z nich, które dla nas wyglądały jako oddzielne błędy, udało się załatwić jedną zmianą, więc zostały ogłoszone pod jednym numerkiem) :)
Od zeszłego czwartku do wczorajszego późnego popołudnia miałem maraton konferencyjny - w czwartkowy wieczór warsztaty z reverse engineeringu w ramach SEConference w Krakowie (o których wspominałem kilka postów temu), w piątkowy poranek prelekcja "Reverse Engineering for fun and profit" również w ramach SEConference (również wspomniana wcześniej), a 5 godzin później konferencja Inżynierii Gier Komputerowych w Siedlcach (dla odmiany, jako uczestnik ;>; o IGK napiszę w następnych postach).
Pierwszy kwietnia się skończył (jakieś 25 minut temu), więc czas najwyższy rozpocząć Secunda Aprilis - drugi kwietnia - dzień w którym wypada powiedzieć co było dowcipem, a co nie :) Ale zacznę od początku...
Miesiąc temu wysłałem zgłoszenie na konferencje Hack In The Box 2010 odbywającą się w Dubaju, i wczoraj dostałem oficjalne potwierdzenie akceptacji tematu. Tak więc wygląda na to, że 21 i 22 kwietnie będę w Dubaju mówił o błędach w Windowsie znalezionych przez j00ru i mnie :)
Kolejny dzień, kolejny e-mail z malware'em (ostatnio to jakaś plaga). Tym razem to Facebook zmienia zasady i trzeba uruchomić aplikacje żeby się zgodzić na nowe...
Dzisiaj Patch Tuesday, więc Microsoft opublikował Microsoft Security Bulletin Summary for February 2010. Jedną z luk (których w Summary jest 25) jest "wyresearchowana" przez j00ru i mnie luka (w tej właśnie kolejności, gdyż to j00ru ją znalazł, a później razem doprowadziliśmy do wynalezienia sposobu jej exploitacji) w procesie systemowym csrss.exe, która pozwala m.in. na podniesienie uprawnień lub ujawnienie wrażliwych danych.
Ostatnimi czasy sporo malware'u wpada na moją skrzynkę pocztową. Pozwolę go sobie tutaj (czyli na blogu) umieszczać - a nuż ktoś kiedyś dostanie podobny e-mail i będzie się zastanawiać czy to fake czy nie :)
Otrzymałem mejlowo (od luqa który zgodził się na publikacje korespondencji ;>) pytanie dotyczące wartości niezainicjowanych elementów częściowo zainicjowanej lokalnej tablicy:
Syndicate Wars jest grą z roku 1996, stworzoną przez, nieistniejące już zresztą, studio Bullfrog. Gra została napisana w C (Watcom) pod DOS extenderDOS4GW i oczywiście przestała działać (natywnie, pomijam rozwiązania typu emulatory) wraz z pojawieniem się współczesnych systemów operacyjnych typu Windows z serii NT. Kilka lat temu Unavowed, będący wiernym fanem tej produkcji, zaproponował mi stworzenie portu tej gry na współczesne OSy, takie jak GNU/Linux czy Windows. Port miał polegać na dekompilacji pliku wykonywalnego gry, zlokalizowaniu wszystkich funkcji standardowej biblioteki C, zależności względem DOS4GW i funkcji I/O (dźwięk, klawiatura, grafika, myszka, etc), wymienieniu ich na natywne libc oraz libSDL/OpenAL (czasem przy pomocy pewnych wrapperów, czy wręcz konwerterów), oraz ponowną rekompilacje do plików wykonywalnych. Dzisiejszego wieczoru udało nam (bo to Unavowed był wyraźnym liderem tego projektu) się ów projekt ukończyć, oraz opublikować, i to nie tylko na zakładane systemu GNU/Linux oraz Windows, ale i dodatkowo na Mac OS X!
Pomysł na tego posta narzucił mi się już jakiś czas temu (czas mierzony raczej w miesiącach niż w dniach czy tygodniach), ale jakoś tak wyszło, że do tej pory nie został zrealizowany. Post będzie poświęcony komunikacji międzyludzkiej, a dokładniej kilku przypadkom które zaobserwowałem podczas swojej "działalności w Internecie", a także wspomnę co nie co o prowadzeniu bloga. Osoby ze sporym doświadczeniem życiowym raczej w tym poście nic nowego nie znajdą, tak więc zachęcam głównie osoby młode do jego przeczytania :)
Kilka tygodni temu gościł u mnie j00ru, co, jak można się domyślić, skończyło się kilkoma ciekawymi pomysłami. Jednym z pomysłów było wykorzystanie mechanizmu call-gate'ów w pisaniu exploitów na kernel/drivery pod Windows, a konkretniej chodzi o wykorzystanie write-what-where do przekształcenia LDT w Call-Gate, i tym sposobem podniesienie uprawnień kodu z user-land do ring 0. Efektem tychże rozważań jest "papierek" oraz kilka PoC, które można ściągnąć poniżej.
Ezin Hack In The Box, który wychodził w latach 2000 do 2005 (razem 37 numerów), doczekał się wznowienia, tym razem jako kwartalnik. Najnowszy numer zawiera 6 artykułów (w tym jeden mój), co przekłada się na 44 strony, w PDF (link niżej). Imho warto ściągnąć i poczytać, kilka ciekawych rzeczy można się dowiedzieć :)
Tematyka niniejszego postu będzie bardzo podobna do poprzedniego, czyli nadal pozostaje przy opisywaniu niewielkich, ale imho ciekawych, detali architektury x86. Takie detale często bywają przeoczone przez twórców emulatorów czy wirtualizerów, a więc mogą posłużyć do odróżnienia środowiska wirtualnego, od prawdziwej maszyny. Bohaterem dzisiejszego postu jest rejestr DR6, albo, będąc bardziej precyzyjnym, jego cztery pierwsze bity (0-3) czyli B0 do B3, które mówią o spełnieniu bądź nie spełnieniu warunków breakpointu. Prosiłbym o przeczytanie całego postu przed wyciągnięciem wniosków :)
Ostatnimi czasy przypominam sobie osdev (ostatni raz coś więcej niż boot menu napisałem jakieś 6 lat temu), więc prawdopodobnie parę następnych postów będzie związane z assemblerem, emulatorami x86 oraz podobnymi instytucjami. Dzisiejszy post poświęcę instrukcji bswap reg16 w trybie chronionym, która jak się okazuje może posłużyć np. do detekcji emulatora BOCHS lub QEMU.
W sobotę, a raczej w nocy z soboty na niedziele, odbyło się kameralne spotkanie dyskusyjno-prelekcyjne o tematyce związanej z bezpieczeństwem, zorganizowane przez Akademickie Stowarzyszenie Informatyczne. Miałem okazję w nim uczestniczyć, za równo jako słuchasz, jak i jako spontaniczny mówca (prezentacje od zera robiłem już na spotkaniu, gdy się okazało że można coś powiedzieć ;>). I było świetnie!
Na forum UW-Team.org pojawiło się pytanie o wykorzystanie flagi RF (Resume Flag) do detekcji debuggera. Ponieważ nie słyszałem wcześniej o wykorzystaniu tej flagi do anty-dbg, postanowiłem przyjrzeć się bliżej. Poniżej zamieszczam moją odpowiedź na zadane pytanie.
Przed chwilą opublikowałem nowy odcinek, z cyferką 7, ReverseCraft, traktujący o inline hook'ach oraz DLL injection - czyli jest to cofnięcie się odrobinę do podstawowych umiejętności potrzebnych każdemu RE. Odcinek trwa ponad godzinę, z czego 20 minut to część teoretyczna, a 47 to część praktyczna w której pokazuje jak od zera napisać injector DLL oraz jak runtime zaaplikować inline hook przekierowujący wykonania na naszą funkcję. Miłego oglądania!
Pojawiły się (już parę dni temu) oficjalne wyniki głosowania w ramach konkursu CONFidence Security Evangelist, w tym w kategorii w której mój blog był nominowany, czyli "Blog o bezpieczeństwie IT w języku polskim".
Opublikowałem drugi odcinek ReverseCraft: Assembler, opowiadający o budowie pojedynczej instrukcji maszynowej x86, oraz o tym, jak wpływa to na budowę instrukcji w assemblerze (x86, protected mode, 32-bit).
Przedwczoraj na sieć trafił mój najnowszy twór - VirusTotal Uploader w wersji 2.0. Jest to w zasadzie zupełnie inne narzędzie niż te do których Was przyzwyczaiłem, tj. ma okienko (nie jest konsolowe), jest przetestowane i skierowane dla szerszego odbiorcy - a to głownie za sprawą tego iż tworzyłem je w ramach Hispasec.
Poniżej zamieszczam linki do prezentacji (PDF) z mojej prelekcji "Practical security in computer games", oraz wersję 0.0.1 alpha SilkProxy. O tym ostatnim parę słów: jest to multi-tunel napisany w C++, skryptowalny w Pythonie, który może służyć kilku do kilku rzeczy, takich jak analiza protokołu, fuzzing ruchu sieciowego puszczonego przez tunel, czy jako proxy. Wersja którą publikuje to wersja którą używałem podczas badań do prezentacji, i jest to wersja robocza, tj. nie wszystko jeszcze działa jak bym chciał, interfejs jest nieudokumentowany i brakuje jeszcze części funkcjonalności - tak więc póki co jest to raczej ciekawostka dla programistów niż coś z czego faktycznie można korzystać. Niemniej jednak zachęcam do rzucenia okiem (w pliku http.py jest prosty przykład użycia; uruchamia się to ./SilkProxy skrypt.py, samo ./SilkProxy też zadziała; do skompilowania trzeba posiadać pythona z headerami/libami do C, oraz GCC (może być MinGW)) ;>
Wczoraj skończył się drugi dzień CONFidence 2.0, a tym samym druga (w tym roku) edycja CONFidence. Siedzę właśnie w pociągu relacji Warszawa-Wrocław (podróż ponad 6 godzin), więc mam troszkę czasu żeby podsumować ostatnie 2 dni, a zarazem dokończyć przerwany wątek.
Na forum uw-team.org exylum zadał pytanie: "czy znak przy konwersji liczb zmiennoprzecinkowych ("," lub ".") zależy od systemu na jakim pracujemy, ustawień regionalnych itp.?". Ponieważ pytanie mnie zaciekawiło, to trochę poszperałem tu i tam, odpowiedziałem na forum i w końcu stwierdziłem że napisze (metodą Kopiego=Pasta) o tym również tutaj, być może kogoś również to zaciekawi.
Szybkie info. j00ru opublikował wczoraj na swoim blogu tablicę nazw i numerów syscalli Win32k (aka shadow table, wykorzystywanej przez user32.dll, gdi32.dll i DirectX) - http://j00ru.vexillium.org/win32k_syscalls/ (w zasadzie jest bardzo podobna do tej z Metasploit, oczywiście z tą różnicą, że zawiera syscalle win32k, a nie kernelowe). Jeżeli lubisz grzebać w niskopoziomowych rzeczach, to na pewno chcesz rzucić na to okiem!
Od wczoraj (a w zasadzie przedwczorajszej nocy) w sieci jest głośno o nowym języku programowania, stworzonym przez ludzi z Google. Język nazywa się Go i leży między królestwem języków niskopoziomowych (jak C/C++) a królestwem języków wysokopoziomowych (jak Python, Java czy C#) (twórcy mówią o nim 'system programming language') - czyli próbuje łączyć zalety jednych (kompilacja do kodu natywnego, szybkość działania, etc) i drugich (garbage-collector, natywne wsparcie dla wielowątkowości, etc). Wczoraj wieczorem stwierdziłem, że przetestuje ten język i przeportowałem jeden ze swoich raytracerów na niego. Po tym pierwszym rzucie oka stwierdziłem, że podzielę się paroma przemyśleniami (wszystko zawarte w tym poście należy traktować jedynie jako moją opinię, wyrobioną po około 5 godzinach pisania w tym języku; zastrzegam że opinia może mi się zmienić ;>).
Jak nauczyły nas stare procesory i kompilatory, if'y bywają kosztowne - każdy if tłumaczony jest na jeden lub dwa skoki (w zależności czy to if czy else if), a skoki miały zwyczaj czyścić kolejkę instrukcji do wykonania w CPU, przez co były dość kosztowne. W związku z czym szukało się innych metod na zapisanie serii if'ów, np. za pomocą operacji matematycznych lub logicznych, które były mniej kosztowne (gdy występowały w niewielkiej ilości) niż skoki które czyściły kolejkę instrukcji. Oczywiście nowe procesory pozwalają na oznaczenie bardziej prawdopodobnych skoków (druga grupa prefiksów, prefiksy 2E (branch not taken) i 3E (branch taken)), a nowe kompilatory C/C++ pozwalają oznaczyć czy warunek w if będzie bardziej czy mniej prawdopodobny (patrz __builtin_expect), a nawet można skorzystać z profilerów i samemu sformułować if'y tak aby testowały zawsze te mniej czy bardziej prawdopodobne warunki (oczywiście trzeba wiedzieć jak kompilator tłumaczy kod, ale nie jest to specjalnie trudne). Niemniej jednak czasami nachodzi człowieka ochota żeby zastąpić parę if'ów jakimś ładnym działaniem matematycznym, a tym samym... utrudnić sobie życie ;>
Na SecDay 2009 mówiłem m.in. o tym, że PHP może z zewnątrz przyjmować nie tylko stringi (int'y są też przekazywane jako stringi), ale również arraye (tablice). Jak prezentowałem, niespodziewanymi arrayami można wywołać całkiem niezłą masę warningów, a dodatkowo czasami zmylić logikę skryptu i doprowadzić do pewnych nieoczekiwanych przez twórcę rezultatów (osoby które nie widziały prelekcji, zachęcam do jej obejrzenia). Podczas prelekcji pokazywałem kilka raportów z wynikami testu paru funkcji PHP, obiecując że ów raporty udostępnię - co niniejszym czynie.
Na sieci znalazł się nowy serwis poświęcony tematyce security - http://niebezpiecznik.pl. Serwis prowadzony będzie m.in. przez Piotrka Koniecznego, co w zasadzie może stanowić gwarancje "ciekawości" materiału oraz szerokiego targetu docelowego, jako że imo Piotrek pisze ciekawie zarówno dla profesjonalistów, jak i dla osób interesujące się bezpieczeństwem tylko hobbystycznie.
Opublikowałem szósty odcinek ReverseCraft (serii o reverse engineeringu), w którym pokazuje jak szukać OEP, oraz mówię o sytuacjach w których nie jest to konieczne.
Po niemałych kłopotach technicznych (takich "na własne życzenie" pod tytułem "zmieniłem system na Linuxa i nie wszystko zadziałało jak należy") udało mi się nagrać i opublikować pierwszy odcinek serii ReverseCraft Assembler, traktujący oczywiście o podstawach języka assembler na platformę x86 (32-bit, PM). Odcinek trwa aż 1h 15m, i dedykowany jest dla osób początkujących oraz takich które zacięły się chwilę później, lub czują że nie do końca wiedzą o co w assemblerze chodzi.
Bardzo często zgłaszają się do mnie osoby które programują stosunkowo niedługo, lub właśnie rozpoczynające swoją przygodę z programowaniem, i pytają o to jaką książkę bym polecił do języka XYZ, czy znam jakiś dobry tutorial, ewentualnie jak rozwiązać dany problem (np. jak poprawić błąd kompilacji lub błąd logiczny), czy jaką funkcję użyć aby uzyskać określony efekt. Przez ostatnie 10 lat które "spędziłem" w Internecie takich rozmów odbyłem dziesiątki, jeśli nie setki. Tak więc wychodząc na przeciw przyszłym programistom, postanowiłem stworzyć Poradnik początkującego programisty (słowo "poradnik" jest tutaj kluczowe). Zapraszam do lektury!
Co jakiś czas przychodzi mi do głowy trochę różnych tematów które jakoś nie mogą trafić do oddzielnego posta, a jednak chciałbym się nimi podzielić. Czas na październikową porcję!
Zgodnie z obietnicą wrzuciłem online swoją prelekcję z SecDay 2009. Na początek jeszcze pewna uwaga - prelekcja była nagrywana aparatem z wbudowanym mikrofonem, tak że ani jakość dźwięku, ani jakość obrazu nie są najcudowniejsze jakie można sobie wymarzyć. Natomiast nagranie imho da się mimo wszystko oglądać. Korzystając z okazji chciałbym podziękować oshogbo//vx za filmowanie wszystkich prelekcji ludzi z Vexillium i Hispasec: Thx m8! ;>
SecDay, SecDay, i po SecDay, jak wszystko dobre, niestety i SecDay się skończył. Konferencja była, moim zdaniem, bardzo udana, za równo z punktu widzenia prelegenta (tj. mikrofon mi działał ;>), jak i słuchacza (tj. prelekcje były ciekawe i fajnie poprowadzone ;>).
Zawsze myślałem że umiem dzielić liczby całkowite i obliczać resztę z takiego dzielenia, ale jak to zwykle bywa, życie zweryfikowało moją ocenę sytuacji, i powiedziało mi "nie umiesz dzielić!". Otóż wziąłem do ręki pewien podręcznik do matematyki (do liceum) w którym definicja dzielenia całkowitego i reszty z dzielenia kapkę odbiegała od mojej. Ofc będąc programistą od razu rzuciłem się do kompa żeby sprawdzić "jak to tam wygląda", i okazało się że nie ma jednej spójnej wersji...
Najpierw zła wiadomość: niestety kolejny odcinek ReverseCraftu ukaże się najprawdopodobniej dopiero po konferencji SecDay. Na szczęście jest również i dobra wiadomość: razem z szóstym odcinkiem ReverseCraftu pojawią się dwa odcinki serii o assemblerze x86. Dodatkowo strona www projektu dostanie kilka dodatków - będzie to (w końcu) możliwość uploadowania zadań via WWW (przyspieszy to cały proces oceniania, choćby dlatego że do kompa na którego będzie upload mam dostęp z każdego zakątka globu, a nie tylko z lab), ranking, oraz shoutbox (tak dla ułatwienia komunikacji między nami). Po za tym dla osób które rozwiążą zadania lub zrezygnują z ich rozwiązywania będą udostępniane dodatkowe odcinki w których pokazuje jak zrobić dane zadanie oraz prezentuje najciekawsze rozwiązania nadesłane przez Was.
Czas na kolejnączęść tematyki PHP internals! Tym razem będzie o popularnym formacie PNG, oczywiście w kontekście obsługi tego formatu przez funkcje getimagesize.
Dzisiaj coś z zupełnie innej beczki - mój pierwszy laptop. Wbrew pozorom nie był to ani Pentium 1, ani nawet 386, a coś jeszcze starszego, czyli gratka dla osób zainteresowanych informatyczną archeologią.
Czas na drugą część (tak, to oznacza że była część pierwsza ;>) posta o getimagesize. Tym razem skupie się bardziej na tym jak getimagesize robi to do czego została stworzona - czyli jak odczytuje wielkość z poszczególnych formatów graficznych. Będzie również o tym dlaczego getimagesize nie powinno się używać do sprawdzania czy uploadowany plik faktycznie jest obrazkiem.
Funkcja getimagesize jest, moim zdaniem oczywiście, jedną z bardziej interesujących funkcji wchodzącej w skład standardowego zestawu funkcji PHP (tak, standardowego, mimo iż jej dokumentacja leży w sekcji pełnej funkcji GD). Czemu ta funkcja jest taka interesująca? Po pierwsze, jej implementacja jest długa, a jak wiadomo, dużo kodu = dużo mniejszych lub większych bugów. Po drugie, funkcja ta bardzo często jest wykorzystywana w sposób niewłaściwy, przez co do kodu wprowadzane są pewne interesujące bugi.
Krótki news: przed chwilą wrzuciliśmy z Unknow'em ReverseCraft #5. Tym razem tematem są packery - prezentuje ogólną zasadę działania protektorów oraz pokazuje jak zrobić prosty packer (w C++). ReverseCraft jak zwykle dostępny jest w formie online oraz do ściągnięcia (linki na stronie z odcinkiem).
Szybkie news: dostałem parę dni temu (thx mulander) info o bardzo fajnym compo organizowanym przez NullCode.pl, a polegającym na rozwiązaniu pewnego zadania programistycznego w jak najmniejszej ilości znaków (tj. kod źródłowy ma mieć jak najmniej znaków). Osobiście uwielbiam tego typu zabawy, więc zachęcam do udziału (a nuż wam też się spodoba). Link do topików z compo: http://nullcode.pl/konkursy-f43.html.
Dzisiejszy post będzie trochę z innej bajki. Mianowicie, od jakiegoś pół roku dysponuje nowym routerem typu SOHO w domu - właśnie tytułowym DI-524 (rev.B), który zastąpił wysłużonego DI-604. I od pół roku miałem problem żeby pograć 2v2 w StarCraft'a siedząc z team partnerem po tej samej - wewnętrznej - stronie routera. Aż do wczoraj...
Dwa miesiące temu pisałem o trojanach bankowych, o tym że niektóre zmieniają ustawienia DNS, inne dodają listę domen, używanych przez instytucje finansowe, do pliku c:\windows\system32\drivers\etc\hosts. Oczywiście obie z powyższych czynności kończą się przekierowaniem nieświadomego użytkownika na stronę phishingową (i niestety również często utratą pewnej ilości pieniędzy).
Z tygodniowym opóźnieniem na sieć trafia kolejny, czwarty wg stosowanej numeracji, odcinek ReverseCraft. Wszelkie informacje o czym jest odcinek, linki do playera i pliku, oraz dodatkowe materiały znajdują się jak zwykle na stronie projektu, czyli re.coldwind.pl.
Z drobnym (no dobra, prawie tygodniowym, więc nie takim drobnym ;>) opóźnieniem na sieć powędrował trzeci eps ReverseCraft - mojego video-kursu reverse engineeringu. Tym razem udało się wszystko ładnie zsynchronizować, i online na raz trafiła wersja do oglądania via www (http://videoarty.pl/play_reverse03_reverse_pamiec_proces_i_pe.html), oraz wersja do ściągnięcia (http://www.uw-team.org/index.php?id=videoarty&dzial=reverse). Dodatkowe materiały, takie jak slajdy, cała masa linków, jakiś kawałek kodu i lista zadań (w tym jedno z przygotowanym przeze mnie EXEkiem) dostępne są jak zwykle na stronie projektu, czyli http://re.coldwind.pl. Miłego oglądania!
Z powodów różnych na moim blogu kapkę cicho się zrobiło ostatnio, ale zapewniam że to przejściowe. Niemniej jednak czas zacząć nadrabiać zaległości, i napisać o tym i owym.
Drugi odcinek ReverseCraft trafił na sieć, i jest do ściągnięcia na stronie serwisu UW-Team (jutro lub pojutrze będzie dostępna również wersja do oglądania online). Po za tym stworzyłem pewną drobną stronkę z materiałami do kursu: re.coldwind.pl.
Tak się zdarzyło ostatnio że wróciłem do analizy trojanów. Powrót został uczczony prawie 24-godzinny maratonem z różnymi zagranicznymi bankerami, i widać że gdy ja zajmowałem się innymi rzeczami, to autorzy trojanów nie spali - wymyślali coraz to nowe metody żeby ich malware był... jeszcze słabiej skonstruowany :p
Do listy konferencji na których się pojawię został dopisany SecDay. Póki co wiadomo że konferencja ta odbędzie się 21-22 września we Wrocławiu, oraz że organizuje ją ten sam człowiek który organizował SekIT (októrympisałem) oraz SysDay (o którym również pisałem) - Łukasz Błażys.
Czytając ostatnio pewne doniesienia prasowe, czy też posty na pewnych blogach, rzuciło mi się w oczy kilka kwestii, o których postanowiłem poblogwać, a w zasadzie porantować ;D
W niedzielę po raz kolejny postanowiłem pobawić się w wizualizację plików. Wizualizacja plików to temat długi i szeroki, i nawet są strony jej poświęcone, na których to autorzy prezentują kolorowe bitmapki przedstawiające pliki - często 1 do 1, czyli 3 kolejne bajty w pliku traktowane są jako wartości RGB. W moim przypadku natomiast zamiast RGB, będzie X i Y.
W końcu jakiś techniczny post! A post poświęcony będzie crackme ESET'u, które to było do połamania na tegorocznej edycji CONFidence z numerkiem 2009. Crackme (przygotowanym specjalnie na confidence) pozwoliłem sobie udostępnić (@Marcin/Jakub w razie czego dajcie znać, to zdejmę ;>), tak aby osoby nieobecne na confi również mogły się pobawić:
Jak pisałem wczoraj, i zresztą już wcześniej, miałem okazję być na tegorocznym CONFidence i, spoilerując już na samym początku, sądzę że była to najlepsza konferencja na jakiej do tej pory byłem :)
Witam ponownie po parodniowej przerwie! Wygląda na to że dodanie informacji o binarce uzyskanej od diabla spowodowało wrzucenie mojego bloga na wykop (nie pierwszy raz zresztą), a to z kolei spowodowało znaczy wzrost ilości zapytań, a to z kolei spowodowało kilka crashy apacha na poprzednim (taaak, już poprzednim) hostingu, co spowodowało iż admini wycięli dostęp do bloga ;) Oczywiście, jak to zwykle bywa, zbiegło się to z moim wyjazdem na CONFidence 2009 (świetna konferencja btw, napiszę coś o niej później), więc nie mogłem natychmiast zareagować ;(
Znajomy (hi diabel! (nie, to nie znaczy że jestem wyznawcą szatana) UPDATE: widziałem propozycję by 'hi diabel' zmienić na 'ave satan', ale chyba nie przejdzie ;D) podesłał mi screena i pewien pliczek. W skrócie: wygląda na to że ktoś zbiera sobie zombie na NK huh. Zacznijmy od screena:
Wczoraj j00ru dał mi znać że mój add-on do cmd.exe, dodający jakże to ważną funkcjonalność (tj kolorki), nie funkcjonuje poprawnie na Windows 7 RC - w związku z czym rzuciłem okiem, i tak oto powstała wersja 0.004d!
Wczoraj wieczorem została upubliczniona 3cia i zarazem ostatnia część pierwszego odcinka mojego kursu, a w zasadzie serii videotutoriali, o reverse engineeringu. Ostatnia część dostępna jest tam gdzie zwykle, czyli na serwisie uw-team.
Pewnego razu Xa, który bardzo lubi eksperymentować z OS'ami, chciał zainstalować dodatkowy system operacyjny - nazwijmy go "Gamma System" - na swoim komputerze, na którym był już pewien system - nazwijmy go "Alpha OS". Traf chciał że za równo "Gamma System" jak i "Alpha OS" nie miały boot loaderów które pozwoliły by wybierać który system ma być bootowany, a w dodatku, każdy loader był na tyle indywidualny, że to właśnie on musiał zostać użyty - więc powstał problem. Oczywiście, jak to zwykle bywa, użycie LILO czy GRUB odpadało z przyczyn różnych. W związku z czym dostałem questa - zrobić żeby to jakoś działało.
Wczoraj wieczorem na serwisie UW-Team pojawiła się pierwsza część (a tak na prawdę to pierwsza część pierwszej części - pierwszy odcinek ma 3 części po 30-40 minut) mojego kursu poświęconego Reverse Engineeringowi (nazwanemu Reverse Craft). Videoart chwilowo dostępny jest tylko do pobrania, ale pewnie niedługo będzie można go również oglądać online (jak tylko będzie stream to dam linka - pewne kłopoty z wielkością video są). Pierwszy odcinek ma być niejako poglądowy i pokazać 'o co w tym RE chodzi' - kolejne odcinki będą miały charakter bardziej edukacyjny ;>
Wczoraj wieczorem wróciliśmy z Krakowa, a konkretniej z wyjazdu na SEConference 2009 - konferencji o której się rozpisywałem już wcześniej. W dużym skrócie, konferencja na prawdę dała radę - poziom był niezły, prelekcje bardzo ciekawe - szczególnie podeszły mi wykłady (w kolejności chronologicznej) Piotr Łaskawca o web fuzzingu, Piotra Koniecznego o haxxowaniu fizycznych urządzeń codziennego użytku (automaty do koli, windy, czytniki kodów, takie tam) oraz Borysa Łąckiego o sumkach które krążą w undergroundzie (tj. ile trzeba zapłacić na wynajęcie botnetu, etc.). Inne wykłady również trzymały poziom, więc podsumowując, konferencja była na prawdę dobra (szczególnie że była darmowa)!
Wyrażenie "assemblerowe źródło" mi jakoś nie leży, ale po 15 minutach straconych na próbę wymyślenia czegoś lepszego, co określało by źródło kawałka funkcji stworzonej w assemblerze, i jednocześnie było dość zwięzłe, stwierdziłem że musi zostać. Wracając do tematu, a w zasadzie dopiero go rozpoczynając, dzisiaj będzie o pewnym sposobie którym się wspomogłem podczas gonitwy za bugiem w pewnej dość rozbudowanej funkcji napisanej w asmie (dialekt NASM). Ów funkcja miała wyszukiwać w obrazie biblioteki (w pamięci, MACH-O) adres podanej metody z podanej klasy (objc), z podanej biblioteki na OS X, i składała się z trzech czy czterech zagłębień pętli. No i oczywiście nie działała jak należy, a ręczne debugowanie tego przyjemne nie było (potem się okazało że cały pomysł nie do końca działa, ale to historia na inny dzień).
Wczoraj, we Wrocławiu, rozpoczęła się konferencja SysDay 2009, o której pisałem już wcześniej. Pojawiło się masę ciekawych osób, było kilka ciekawych prelekcji - m.in. zawsze ciekawa prelekcja Dariusza Puchalaka o SSH, prelekcja o socjotechnice prowadzona przez Rafała Podsiadłego - która co rusz przeradzała się w żywą dyskusję, prelekcja Sławomira Kobusa z F-secure o Symbian OS (bardzo inspirująca swoją drogą, muszę się przyjrzeć temu systemowi) oraz prelekcja Michała Majchrowicza o m.in. XSSach (huh, nie wiedziałem że można użyć /asdf/ zamiast "asdf" - np. javascript:alert(/asdf/)... ciekawie wyszło moim zdaniem ;>). Tego dnia również ja miałem swoją prelekcję, którą udało mi się jakoś wychrypieć (jestem kapkę przeziębiony, i szczerze się bałem że stracę głos podczas prelekcji... na szczęście orgowie zorganizowali mi szklankę ciepłej wody, i udało się stracić głos dopiero PO prelekcji ;D).
Kilkudniowa konferencja Inżynierii Gier Komputerowych 2009 organizowana przez Akademie Podlaską (w Siedlcach) dobiegła końca - wczoraj późnym wieczorem trafiłem z powrotem do Wrocławia, a teraz próbuje ogarnąć sprawy które przez te kilka dni się nazbierały. (Tak na prawdę kilka już ogarnąłem, i zrobiłem krótką przerwę żeby naklepać tego posta ;>).
Na GDPL pojawiły się wyniki (dostępne również tutaj). Zgodnie z moimi przewidywaniami Krzysiek K. zasłużenie wygrał ;>. Drugi był maskl ex aequo ze mną, a trzeci Reg. Pełna lista miejsca znajduje się poniżej:
Wczoraj wieczorem od godziny 17:00 do 20:00 odbyło się trzygodzinne compo zorganizowane przez GDPL (a konkretniej przez meehav'a). Tematem przewodnim była 'gra w której jest za równo świnia jak i krowa' (oryginalny temat, przyznaje). Mimo ogólnego braku czasu, stwierdziłem że 3h w niedzielę wieczorem znajdę, i (po akceptacji propozycji przez górę - czyli moją ukochaną żonę ;>) również udało mi się wziąć udział.
Nadszedł dzień w którym rzuciłem w końcu okiem na programowanie aplikacji niekonsolowych na Mac'a. Aplikacja na Maca zazwyczaj tworzy się przy użyciu języka Objective C (z którym jeszcze styczności nie miałem) oraz API Cocoa (OSX'owski odpowiednik WinAPI; kiedyś był jeszcze Carbon). Z punktu widzenia programisty składnia Objective C bardzo mi się spodobała, ale przyznaje szczerze, że Objective C z punktu widzenia RE jest jeszcze ciekawsze ;>
Jak moi stali czytelnicy wiedzą, od jakiegoś czasu dysponuje MacBookiem z OS X'em. W końcu stwierdziłem że fajnie byłoby sprawdzić jak wygląda exploiting standardowych rodzajów błędów na OS X'ie. Muszę przyznać że raz czy dwa OS X mnie pozytywnie zaskoczył. Natomiast ten post będzie o innym "razie", gdy niespodzianka nie była pozytywna (pod względem bezpieczeństwa), ale niewątpliwie była (hermetycznie) komiczna ;>
Historia zaczyna się jak zwykle. Pisałem pewną aplikację, która generowała pewne pliki testowe. Pliki były do siebie podobne, więc wyciągnąłem wspólny czynnikprzed nawias - zrobiłem generowanie wspólnej podstawy pliku, a potem porobiłem funkcje które zmieniały podstawowy plik (file shader, tylko w GF 15200 GTX! ;>), po czym ów nowy plik był zapisywany. Oczywiście musiałem posiadać pewną tablicę/wektor z tymi funkcjami, którą grzecznie uzupełniałem o każdą dopisaną funkcję. Po 38 funkcji się znudziłem...
W poprzednim poście pisałem o narzędziu do pomiaru entropii, natomiast kwestię "po co komu pomiar entropii" zostawiłem wtedy na któryś kolejny post. Czas ów postu właśnie nadszedł.
Jest pewien tool, stworzony przeze mnie i j00ru, który już jakiś czas temu miałem wrzucić na sieć, ale jakoś tak kod był niepiękny, i nigdy nie było czasu żeby go uładnić. Aż w końcu w weekend będąc u rodziców wziąłem laptopa i przepisałem kod na czysto.
Ostatnio pisałem o spamie w polu referrer nagłówka HTTP - ktoś wymyślił żeby wrzucać tam linki (czasem okraszone BBCodem) prowadzące do sklepów z viagrą, penisami, i powiększaniem zegarków. Najwyraźniej nadeszła nowa, lepsza, fala ów spamu - od wczoraj u mnie w referrerach pojawia się, nie jeden, a kilka linków do różnych sajtów, z czego ostatni to jakaś podstrona mojego bloga, pierwsza to spam, a czasem pojawia się jeszcze jakaś inna niezwiązana stronka.
Ostatnio mam trochę na głowie, więc i wpisów na blogu niedużo. Ale stwierdziłem że uzbierało się kilka drobnych tematów które nie zajmą mi za wiele czasu, więc o nich napiszę.
Wczoraj udało mi się posiedzieć chwilkę nad ExcpHook'iem, w związku z czym prezentuje dzisiaj wersję 0.0.5-rc2 (to jest drugi release candidate wersji alpha 0.0.5, tak, wiem, mam dziwne numerowanie wersji).
Sprawiłem sobie parę dni temu książkę "Windows Via C/C++ (Wydanie piąte)" by Jeffrey Richter i Christophe Nasarre, ot tak aby doszlifować moje WinAPI. Pomysł zakupu okazał się bardzo dobry - już na 50 stronie znalazłem pewną przydatną reverserowi ciekawostkę, którą pozwolę sobie zacytować:
Dzisiaj będzie trochę strikte technicznego security - napiszę co nie co o technice zwanej "return-oriented programming" lub "return-oriented exploiting" lub "ret-to-libc bez wywołań funkcji" lub "ret-to-anything". Jak zwykle podzielę się swoimi spostrzeżeniami co do ów techniki, ponieważ jak zwykle papierki zacząłem czytać po użyciu techniki, zamiast przed nią (to to moje upodobanie do odkrywania koła na nowo).
Jak widzicie, Xa zgodnie z "groźbą" dostarczył nowy lay ;> Pewne rzeczy jeszcze nie są do końca ostylowane, a i jakieś poprawki w ostylowanych już rzeczach się pewnie też trafią. Ale ogólnie nowy lay _jest_.
Dzisiejszy post nie będzie już o cmd.exe i BATach. Zamiast tego dzisiaj będzie trochę rysowania w C++, a konkretniej rysować będziemy nie my, a funkcje sin oraz cos.
Zgodnie z obietnicą, dzisiaj będzie o wykorzystaniu OpenGL w skryptach .BAT. Chciałbym jednak od razu przypomnieć, że .BAT z szybkością dużo wspólnego nie ma ;> (mimo to pod koniec co nie co o optymalizacji napiszę i tak).
W końcu od wczoraj oficjalnie (bo nieoficjalnie już od jakiegoś czasu) można ściągnąć Windows 7 wersję BETA. Ściągnąłem, zainstalowałem (ładnie wygląda), i zacząłem grzebać.
Nie wiem co jest z tym tygodniem, ale co wpadnie mi w ręce jakiś nowy kawałek sprzętu, to muszę spędzić sporo czasu próbując go uruchomić (a wszystko przez software!).
Noc się skończyła, i dane przesyłane z CPC na PCta również skończyły się przesyłać (zrzut pamięci, jeśli kogoś interesuje, można ściągnąć tutaj). Kod z CPC również przepisałem - listing jest na końcu postu.
W oczekiwaniu na nowy programator (który pewnie przyjdzie "pod koniec tygodnia") stwierdziłem że przydałoby się przerzucić zrzut RAM'u z Amstradzika na PCta. Powstało pytanie - jak to zrobić nie mając żadnych kabelków, dyskietek, etc? Okazuje się że jest pewien (pewnie nie jeden), bardzo zabawny moim zdaniem, sposób ;D
Ogólnie rzecz biorąc, dobrze jest mieć żonę. A szczególnie taką, która znajduje w przysłowiowej szafie starego Amstrad-Schneider CPC 464 (64k Colour Personal Computer). Tak więc dostałem nową zabawkę (yeey kolejna ciekawa architektura do rozpoznania ;D), o której pewnie kilka postów z czasem się pojawi.
W menu po prawej w sekcjach (pod linkami do postów) dodałem link do działu z małymi kawałkami kodu które kiedyś tam naklepałem. Są to raczej proste rzeczy, przeznaczone dla bardziej początkujących czytelników, ale z czasem postaram się tam jakieś ciekawostki też powrzucać.
Panowie z Apple chyba lubią stare toolsy. Ostatnio grzebiąc z Unavowed'em przy pewnym projekcie (o którym napisze przy innej okazji), a konkretniej, próbując ów projekt przeportować na Mac OS X'a, natrafiliśmy na pewną przeszkodę która przedstawiła się nam jako Apple Inc version cctools-698.1~1, GNU assembler version 1.38. Jest to defaultowy assembler (as) używany na (aktualnym) Mac OS X, i najwyraźniej pamięta on jeszcze czasy gdy na chleb mówiłem 'bep' a na muchy 'tapty' (oby to 1.38 oznaczało tylko inną numeracje, ponieważ - dla porównania, obecna wersja wg. wiki to 2.19, mój MinGW twierdzi że ma wersje 2.18.50, w roku 2000 była wydana wersja 2.11, a w obecnym changelogu as najstarszy wpis dotyczy wersji 1.93.01).
Siedząc w pokoju hotelowym na PyCONie naszło mnie żeby sprawdzić co się dzieje jeśli wyczyści się procesowi całą pamięć (lub proces sam sobie ją wyczyści). "Wyczyści" w znaczeniu uwolni co się da (VirtualFree oraz UnmapViewOfFile), a resztę w miarę możliwości wyzeruje. Eksperyment miał za zadanie sprawdzić przy okazji jak zareaguje na to system, oraz inne aplikacje.
Niecałe pół roku temu stwierdziłem że przydała by mi się animowana tapetka, generowana realtime, ale bez użycia akceleracji 3D (tj. bez OpenGL/D3D). Dodatkowymi założeniami był FPS - mógł być bardzo niski, na poziomie 2-3 klatek na sekundę, oraz wykorzystanie kilku core'ów (do 4rech). Jak to w życiu bywa, naklepałem troszkę kodu, po czym zająłem się innymi rzeczami. Efekt może powalający nie wyszedł, ale zdecydowałem się i tak opisać to co mi wyszło - może kogoś to zainteresuje ;> (na obrazki, z wyjątkiem height mapy, można klikać; kod źródłowy dla Windowsa/Maca/Linuxa i filmik są na końcu postu).
Rozmawiałem ostatnio z oshogbo z mojego teamu o format bugu, i gdy doszliśmy do testowania przykładowego kodu, okazało się że to co powinno działać - tag %n, nie działa. Co ciekawe, problem wydawał się dotyczyć jedynie Windowsa Vista, ponieważ na XP wszystko śmigało aż miło. Postanowiłem kapkę wgłębić się w problem, i oto co się dowiedziałem...
Wygląda na to że 13 października zaczyna się pierwszy etap Hacker Challenge - amerykańskiego konkursu dla RE. Z tego co widzę w tym roku o połowę obcięli wysokość nagród, widać kryzys faktycznie im zalazł za skórę. Anyway, zachęcam RE do zainteresowania się tym konkursem - wszystkie miejsca są nagradzane.
W piątek w nocy C++ mnie wchłonęło, i wypuściło dopiero w poniedziałek rano (z krótkimi przerwami na sen, i na skok do kina na Babylon A.D., który moim zdaniem jest całkiem niezły, i bardzo klimatyczny, chociaż zakończenie... cóż, widać że studio skróciło film o 70 minut wbrew woli reżysera, nic tylko czekać na wersję reżyserską), więc dopiero teraz kolejny obiecany post hehe.
Trochę się u mnie sprawy uspokoiły, więc wracam do opisywania zadanek z tegorocznego SD6. Z uwagi na późną godzinę dzisiaj opisze tylko jedno, a opisy kolejnych znajdą się w następnych dniach. Dodam że polskojęzyczni czytelnicy mogą znaleźć rozwiązania na oficjalnym forum SD6, natomiast, z uwagi na to że większość zadań była skonstruowana tak, że istniało kilka rozwiązań, oraz z uwagi na fakt iż mojego bloga czytają również osoby nie związane z językiem polskim, i tak opisze zadanka z SD6 po swojemu ;>
Nadal jestem niestety trochę przeziębiony, i większość czasu spędzam kurując się, więc ponownie krótki news (ale mam nadzieje że jutro już coś ciekawego merytorycznie napiszę).
Za jakieś dwie godziny wyruszam (razem z kanedaaa) na SekIT, nową konferencję z działki bezpieczeństwa komputerowego. Jakoś tak wyszło że tym razem jako prelegent - czyli będę przez 45 minut się produkował na scenie ku uciesze (taką mam przynajmniej nadzieje) publiki ;> A mówił będę o bankerach, czyli trojanach bankowych. Będzie ogólny przegląd, kilka filmików, i sporo machania rękami. Prezentację z filmikami wrzucę po SekIT gdzieś tutaj.
Jak zainteresowanym wiadomo, wczoraj o 20 rozpoczął się pierwszy dzień interenetowego etapu Security Days 6. Termin nadsyłania zadanek wstępnie został ustalony na dzisiaj na godzinę 21, jednak z powodu ataku (DDoS podobno) na główną stronę konkursu został przesunięty na jutro na 21. Cóż, szkoda, bo chciałem opisać już dzisiaj pierwsze zadanie praktyczne, które było moim zdaniem odpowiednie na dzień pierwszy - dość proste, ale nawet ciekawe. Cóż, niestety będę mógł o tym napisać dopiero jutro ;>
Przy okazji pojawienia się ponownie informacji o tym że Google Chrome ściąga pliki bez pytania na bugtraq wznowiła się dyskusja o tym czy jest to bug, feature, czy może vuln (luka w bezpieczeństwie).
Krótka ciekawostka. Na liście FD pojawiło się info o Remote Buffer Overflow w Chrome (by Le Duc Anh - SVRT - Bkis), wymagającym jednak nieznacznej ingerencji usera - kliknięcia 'Zapisz jako...' (buffer overflow ma miejsce w obsłudze tagu <title>). Researcher udostępnił dwa exploity PoC, jeden uruchamiający kalkulator (dostosowany podobno pod XP SP2, jednak u mnie coś on nie działa), oraz drugi po prostu crashujący cały browser. Należy zaznaczyć że CAŁY chrome się crashuje, a nie tylko pojedynczy tab - widać błąd ma miejsce w browserze, lub jest w jakiś magiczny sposób przenoszony z renderera do browsera.
Ostatnio miałem okazję tworzyć w C++ (MinGW g++) pewną małą bibliotekę do runtime-patchów. W pewnym momencie zaszła potrzeba stworzenia funkcji w całości w assemblerze, bez żadnych dodatków ze strony kompilatora, czyli po prostu chodziło o funkcję "naked". Niestety, o ile kompilatory rodem z Redmond udostępniają atrybut __declspec(naked) dla x86 [Visual C++ Language Reference - naked (C++)], to kompilatory z GNU Compiler Collection obsługują "naked" jedynie w portach kompilatorów dla ARM, AVR, IP2K i SPU [Using the GNU Compiler Collection (For GCC version 4.3.0) - Function Attributes]. Powstał więc pewien problem który miałby kilka rozwiązań: