Filtry

•May 30, 2009 • Leave a Comment

Ostatnio miałem okazje trochę pobawić się w pisanie filtrów używanych w grafice, m.in. filtru okienkowego oraz medianowego co okazało się całkiem niezłym fun’em, szczególnie jeżeli chodzi o rezultat ich działania. Swoją implementacje filtrów wykonałem w C++ Builder’e i na koniec posta postaram się dołączyć co nieco kodu ,ale nie będzie to całość, z tego względu, że imo całość nie jest tak dojrzała(co nie przeszkodziło im uzyskać max pkt. za to zadanie na uczelni :P ) aby ujrzeć światło dzienne :P .

Cała filozofia filtru okienkowego polega na wybraniu rozmiaru okna (najpopularniejsza wartością jest 3×3) czyli ilości pixeli branych pod uwagę podczas filtrowania oraz odpowiedniemu dobraniu dla nich współczynników.
Grid
Tablica pixeli. Przykład okna filtrującego o rozmiarze 3×3.

Powyższy rysunek prezentuje zastosowanie okna o rozmiarze 3×3 gdzie pixel zaznaczony na fieletowo jest pixelem wyróżnionym. Iterując po tablicy pixeli musimy sprawić, aby każdy pixel w pewnym momencie iteracji był pixelem wyróżnionym, czyli jest to nic innego jak poruszanie się po niej od pozycje x = 0,y =0 do x = image_width -1 , y = image_height -1.

Przenosząc te informacje na kod :

	for(int x = 0;x < bmp->Width;++x)
	{
	  for(int y = 0;y < bmp->Height;++y)
	  {
	      //loopy odpowiedzialne za operowanie na oknie filtrujacym
	      for(int j = -(windowSize/2); j < windowSize - 1; ++j)
	       {
		for(int i = -(windowSize/2); i < windowSize - 1;++i)
		{
                         //pobranie pixela z uwzględnieniem
                        //wysokości i szerokości bitmap’y
		color = getProperPixel(bmp,x+i,y+j);
		( … )

Warto tutaj zauważyć , że indexy “i” oraz „j” , są tak dobrane tak iż pixel wyróżniony znajduje się w środku okna, czyli od razu mamy wniosek taki, że aby móc wyznaczyć środek okna jego wielkość musi być liczbą nie parzystą >1 (bynajmniej nie spotkałem się z zastosowaniem innych wartości, jeżeli ktoś miał taka przyjemność to piszcie).
No tak ,ale nie powiedzieliśmy sobie jeszcze co tak naprawdę oznacza to „wyróżnienie”. Oznacza ono tyle iż wartość tego pixela zostania zmieniona na podstawie banalnego algorytmu , o którym za chwilę. UWAGA!!! Nie zmieniamy wartości pixeli w obrazie źródłowym , a więc należy sobie przygotować kolejny obiekt reprezentujący nasz image po filtrowaniu, który będzie podlegał modyfikacją. Ok., teraz jak przedstawia się sam algorytm wyliczający nową wartość dla pixela wyróżnionego.

Zapis matematyczny dla okna o wymiarach 3×3:
formulka_1
oraz
formulka_1
oraz w przypadku kiedy suma współczynników równa się 0.

Myślę, że sprostowania wymaga jedynie oznaczenie W(i,j) – jest to oczywiście tablica współczynników okna filtrującego.
Rzućmy teraz okiem jak ten zapis przedstawia się w kodzie(wielkość okna dowolna ze wspomnianego wyżej przedziału):

(   …   )
for(int j = -(windowSize/2); j < windowSize - 1; ++j)
{
  for(int i = -(windowSize/2); i < windowSize - 1;++i)
   {
      //pobierz odpowiedni pixel
      tmpColor = getProperPixel(SrcPixels, x+i , y+j );
      r =  GetRValue(tmpColor)  * window[index];
      g = GetGValue(tmpColor)  * window[index];
      b = GetBValue(tmpColor)  * window[index];

      totalR +=   r;
      totalG +=  g;
      totalB +=  b;
      index++;
      }
}

//zsumowanie wartości wszystkich współczynników
suma = accumulate(window.begin(),window.end(),0);
if(suma == 0)
    suma = 1;

totalR /= suma;
totalG /= suma;
totalB /= suma;			

totalR = min(255, max(0, totalR));
totalG = min(255, max(0, totalG));
totalB = min(255, max(0, totalB));

//modyfikacja wartości pixela w obrazie docelowym
DstPixels->Canvas->Pixels[x][y] = (TColor)RGB(totalR,totalG,totalB);
//zeruj index pozycji w oknie współczynników
index = 0;
//zeruj wartości
totalR = 0;
totalG = 0;
totalB = 0;

To czego nie objął wzór matematyczny ,a co raczej jest oczywiste to wykonanie całego algorytmy dla każdego kanału RGB osobno. Oczywiście można zastosować np. konwersje z formatu RGB na YUV i tam jedynie manipulować wartości Y , a następnie już przy samej aktualizacji obrazu docelowego zamienić YUV na RGB, ale w tym zapisie chodziło mi o prostotę.
Ok. czas na przykładowy interface aplikacji:
interface

,aż razi swoją prostotą ;].

Teraz cała zabawa polega na tym, aby dobrać odpowiednie współczynniki dla okna filtrującego.
Przyjrzyjmy się rezultatom działania filtrów z różnych kategorii (jako modela wybrałem myślę wszystkim dobrze znaną postać Dexter’a :D ):

Filtr dolnoprzepustowy
dolno
Filtr górnoprzepustowy
gorno
Filtry krawędziowe
krawedziowe1
krawedziowe2
Filtr konturowy
konturowe

Myślę, że efekty całkiem ciekawe;).

Przejdźmy teraz do filtru medianowego. Jego zasada działania jest nieco odmienna choć nadal będziemy korzystać z okna lecz w tym wypadku nie definiujemy żadnych wartości współczynników. Myślę ,że kawałek kodu wyjaśni sprawę:

void CFilters::medianFilter(Graphics::TBitmap *bmp,
Graphics::TBitmap *bmpRez,
int windowSize)
{

	vector pixels;
	TColor color;
	//glowny loop dla siatki pixeli wyznaczajacy tzw pixel wyrozniony
	for(int x = 0;x < bmp->Width;++x)
	{
	  for(int y = 0;y < bmp->Height;++y)
	  {
		//loopy odpowiedzialne za operowanie na oknie filtrujacym
		for(int j = -(windowSize/2); j < windowSize - 1; ++j)
		{
			for(int i = -(windowSize/2); i < windowSize - 1;++i)
			{
				  color = getProperPixel(bmp,x+i,y+j);
				  pixels.push_back(color);
			}
		}

	sort(pixels.begin(),pixels.end());
	bmpRez->Canvas->Pixels[x][y] = (TColor)pixels[pixels.size()/2];
	pixels.clear();
	  }
	}

}

Tak ja wspomniałem powyżej nadal posługujemy się oknem lecz w tym wypadku tylko i wyłącznie w celu zgromadzenia wartości pixeli „pokrytych” przez okno. Wartość pixela wyróżnionego zastanie zastąpiona poprzez wartość środkową zgromadzonych pixeli , stąd widoczne sortowanie w kodzie:
sort(pixels.begin(),pixels.end());
oraz wskazanie elementu środkowego:
(TColor)pixels[pixels.size()/2];
(Np. dla filtru o rozmiarze okna 3×3 elementem środkowym będzie element o indexe 5).
Oczywiście , żeby móc obserwować efekty działania filtra medianowego należy wcześniej dodać „szum„.Oto kod prostego „zaszumiacza” :D :

 //glowny loop dla siatki pixeli wyznaczajacy tzw pixel wyrozniony
for(int x = 1;x Width - 5;++x)
{
  for(int y = 1;y Height - 5;++y)
  {
 bmp->Canvas->Pixels[x][y] = bmp->Canvas->Pixels[x+rand()%5][y+rand()%5];
  }
}

i efekt jego działania:
szum

Czas na przyjrzenie się działaniu tego filtra:
wielkość okna 3×3
med1

wielkość okna 9×9
med2

W razie jakiś pytań ,ciekawie „przefiltrowanych fotek” ,sugestii piszcie ;) .
Obiecany kod – > Filters.zip.

Confidence 2009

•May 22, 2009 • 2 Comments

LGIM0007
W ostatni weekend to jest 15-16 Maj 2k9 miałem przyjemność uczestniczyć( tak ja w zeszłym roku z resztą :P ) w piątej już edycji konferencji traktującej o bezpieczeństwie IT Confidence 2009. Na wstępie powiem co mi się chyba już zdarzyło na tym blogu, że lepszej konferencji od Confidence w Polsce nie było i jak na razie nie widać „rywala” ;) .

Postępując chronologicznie:

/* Podróż */
W tym roku bez żadnych dodatkowych kłopotów z PKP( tak tak ,warto o tym wspomnieć ,bo w tamtym roku czekaliśmy z Coldwind’em ok.3.5h na spóźniony pociąg, a jego delay time co 45min był sukcesywnie inkrementowany o kolejne 45 :D ) w sielankowej atmosferze podziwiając krajobrazy ,przemierzaliśmy z Gyn’em kolejne setki kilometrów. Gdzieś po drodze do przedziału zainjectował się j00ru i już pełną tegoroczną ekipa zmierzaliśmy do celu.

/* Camp place */
Camp place tudzież miejsce noclegowania to dość nietuzinkowy tegoroczny pomysł organizatorów nazwany Hackers’ Squad.
LGIM0011
Pomysł polegał na umieszczenie uczestników we dwóch hostelach przy czym uczestniczy trafiali do pokojów w sposób losowy :D . Powiem szczerze, że na początku miałem mieszane uczucia co do tego pomysłu, ale ostatecznie muszę postawić wielkiego plusa za hostel/śniadania i ekipę jaką można tam było poznać ;) . Dodatkowym atutem
hostelu była jego lokalizacja :D , jakieś 300m od Kina Kijów gdzie odbywała się konferencja
Fotka z pokoju:
hs3
j00ru & me

/* Before party */
Kolejna innowacja :D . Jako, że Kino Kijów ma własny klub to organizatorzy postanowili wykorzystać i tą możliwość do zagospodarowania nam pierwszego wieczoru poprzez projekcje następujących tytułów:

Gry Wojenne (Wargames)
Metropolis
PI
Wróg Publiczny (Enemy of the State)
H4ck3rs Are People Too
LGIM0004
me & Gynvael Coldwind na seansie w klubie Kijów

Napisałem „oglądając”, bo wytrwaliśmy do końca pierwszego filmu :P , ale w sumie bez większych strat, bo widziałem wcześniej już:
H4ck3rs Are People Too jak najbardziej polecam i jakby ktoś nie reflektował tego dokumentu to jest to video o społeczności związanej z security, a film ten został po raz pierwszy zaprezentowany na DefCon’e 2008.
PI – bardzo klimatyczny film, polecam jeżeli lubisz nie przeciętne kino
Gry Wojenne – ten film właśnie udało mi się obejrzeć w całości w klubie i powiem, że czasami był zabawny:D Najlepszy tekst z filmu:
Teacher: “Who first suggested the idea of reproduction without sex?”
David: “Your wife?”

I tak upłynął pierwszy wieczór.

/* Dzień pierwszy */
Kolejną delikatna zmianą, która pojawiła się w tym roku (można ją było odczuć rano)jest godzina rozpoczęcia się wykładów. Przesunięto ją z 9:00 na 10:00 :D (imo bardziej ludzka godzina).
Oczywiście jak to zwykło bywać na konferencjach po rejestracji zostaliśmy obdarzeni przez piękne hostessy torbą z gadgetami:
LGIM0008
Konferencje rozpoczęła się prezentacja:
Bruce Schneier’a – „Reconceptualizing Security”
Mówił on o tym jak odczuwamy bezpieczeństwo ,kiedy czujemy się bezpieczni, a tak w ogóle nie jest oraz kiedy jesteśmy bezpieczni, a tego bezpieczeństwa nie odczuwamy. No…., moim zdaniem prezentacja nietuzinkowa ze szczyptą filozofii tak jak lubię, widać tu po prostu wieloletnie doświadczenie w branży oraz ogrom przemyśleń na temat security. Mistrzostwo po prostu;).

Joanna Rutkowska – „Thoughts about Trusted Computing”
Bardzo dobra prezentacja (czego można się było z resztą spodziewać;)) ,m.in. omawiająca składniki
Trusted Computing: takie jak : TPM,TXT,VT. W szczególności muszę wspomnieć, że forma samej prezentacji przypadła mi do gustu ponieważ slajdy były przejrzyste(bez zbędnego przerostu formy nad treścią oraz wodotrysków), czarne tło kilka bloków/schematów objaśniających bieżące zagadnienie i to wszystko. Co do ciekawostek to Joanna zapowiedziała opublikowanie najnowszych badań w najbliższe wakacje m.in. na temat Trusted Computing :D . Czyżby wspomniane komponenty nie były tak bezpieczne jak zakładają ich twórcy ?Przekonamy się w wkrótce.

Eddie Schwarz – „Understanding Social Networking Threats Using Live Threat Intelligence”
Prezentacja dość na czasie zważając na to, że niektórzy wydają się żyć portalami społecznościowymi.

no i nadszedł czas na …

/* Lunch Break */

Jeżeli chodzi o same snacki, które są cały czas dostępne podczas konferencji to jest git, ale niestety ja jako wielki smakosz musze niestety przyznać minusa za obiad, bo to były dania w stylu:
„prawie zupa” oraz „prawie szaszłyk”. Także zdecydowanie to nie było to co misie lubią najbardziej. W swojej opinii nie byłem osamotniony ,bo moje zdanie podzieliło jeszcze parę osób, także coś w tym musi być :) .

Po wydłużonym lunch’u ,zdecydowałem się( tak tak ,sesje NIESTETY zostały podzielone po 3’im wykładzie) na prezentacje:

Alexander Kornbrust – “Oracle SQL Injection in Webapps”
Dla mnie interesująca prezentacja z tego względu, że o ile przeprowadznie pentestów na bazach MSSQL czy MySQL to jest chleb powszedni to jednak bazy Oracle chodź tak powszechne i lubiane w świecie biznesu to widywane są przeze mnie rzadko, a wręcz wcale. Także miło było zobaczyć co do „zaoferowania” mają funkcjonalności w różnych wersjach baz Oracle podczas ataków np. SQL (Blind) Injection :D .

Walter Belgers – „Lockpicking 101”
To był jeden z wyczekiwanych przeze mnie tematów ponieważ panowie zajmujący się Lockpicking’em mieli pojawić się na zeszłorocznej konferencji, a niestety się to nie udało. To co można było zobaczyć na prezentacji to masa różnego rodzaju zamków oraz metod, którymi można je otworzyć w sposób mniej lub bardziej inwazyjny. Widać było także wieloletnie doświadczenie prelegenta w tej branży.
Zabawna historia związana z tym tematem, którą przytoczę wydarzyła się wieczorem podasz powrotu do hostelu kiedy to równocześnie doszliśmy do drzwi(ja,Gyn,j00ru) i cześć ekipy loockpickerów już w środku kamienicy. Chwila konsternacji ,każdy uderza się po kieszeni gdzie te klucze po czym ,któryś lockhackerów chciał się pochwalić skillem i zamierzając otworzyć zamek niczym szpieg z krainy deszczowców świecąc miniaturowa latarką zaczął wyciągać picka ,ja nacisnąłem po prostu dzwonek do drzwi i ktoś otworzył je od wewnątrz :D ..hahah..byłem szybszy. Kolejny raz potwierdza się reguła, że najprostsze metody są najlepsze ;) .

Michał Sajdak – „Zdalny root na ruterze klasy SOHO”
Prezentacja ok., bez jakiś większych rewelacji, ale ukazująca potencjał wykorzystania błędów w tanich powszechnie używanych router’ach .

Martin Mocko – “Race to baremetal: UEFI and hypervisors”
Interesująca prezentacja oraz ciekawa dyskusja, która wywiązała się tuż po niej, pomiędzy Joanna( w tym temacie to było do przewidzenia :P ) oraz prelegentem.
. Tam trzeba było po prostu być.

… i tak minął pierwszy dzień prelekcji. Wieczorem w klubie kijów było o czym rozmyśla jak i dyskutować, także pozytywnie ;) .

/* Dzień drugi */

Rich Smith – „VAASeline: VNC Attack Automation Suite”
Rich jest członkiem firmy Immunity, myślę, że jest to firma, którą większość z was kojarzy m.in. przez takie projekty jak CANVAS czy Immunity Debugger. Rich stworzył bardzo użyteczną biblioteka dla pythona ułatwiającą proces automatyzacji ataków na VNC, której moim zdaniem warto się przyjrzeć;).

Jacob Appelbaum – „Tor Network”
Było technicznie ,było filozoficznie czyli bardzo dobra mieszanka.
Na tej prezentacji można było się dowiedzieć o tym jak działa sieć tor jak można stać się jej aktywnym węzłem , itd. , ale nie tylko. Jacob wspomniał także jaki jest sens tworzenia takiej sieci. Na szczęście w Polsce nie mamy takich problemów jak np. w Chinach, że rządowi nie podoba się youtube no to trach!!! i nikt już nie zobaczy kolejnego odcinka Tiger Team’u, a dzięki Tor’wi można to ominąć. Prelegent wspominał także o takich krajach, w których anonimowość, jaką daje Tor np. dziennikarzom, którzy piszą otwarcie na swoich blogach o tym co nie podoba się im w ich kraju ,jest na wagę ich życia.
Zabawną historią była opowieść o dwóch obozach FBI, które wzajemnie się kłócą czy Tor przynosi im więcej korzyści czy kłopotów :D .

Alessio Pennasilico – „Bakeca.it DDoS: How evil forces have been defeated.”
Hehhe jeden z moich ulubionych prelegentów confidence. Niesamowity sposób opowiadania oraz zabawny akcent (wyrażenie brzmiące “eso hon” rozkminiałem sporo czasu w tamtym roku, aż udało mi się odganąć, że chodzi tu o „and so on” :D ). Jeżeli chodzi o sprawy techniczne związane z prezentacja to tak jak w temacie Alessio opowiadał o ataku DDoS na firmę Bakeca.it ( coś ala allegro),
która pozwoliła mu jak widać zresztą ( i brawa dla niej) na opisania i opowiedzenie całego zdarzenia.
Genialnie opowiedziane kolejne kroki postępowania ataku oraz środków przeciw działania.

Michael Kemp – „Rootkits are awesome: Insider Threat for Fun and Profit”
To wystąpienie było mega zabawne, a zarazem tragiczne :D . Inaczej skomentować tego nie mogę, bo jeżeli, ktoś pokazuje listing Dll’ek wykorzystywanych przez dwie aplikacje, porównuje je, dochodzi do wniosku że są one identyczne i na tej podstawie stwierdza, że obie aplikacje działają identycznie to sorry :D Po prostu po parunastu minutach słuchania zacząłem się obawiać o tego człowieka jak daleko posunie się on w swoich fantazjach i jak wiele osób naskoczy na niego po prezentacji :D .
Tłumaczyć go może jedynie fakt, że tak jak wspomniał na samym wstępie był na dużym kacu i nie bardzo pamięta jak wrócił do hotelu:D…mam też nadzieje, że cała tą prezentacje tworzył w podobnym stanie wtedy jestem w stanie o tym zapomnieć. Oczywiście zgodnie z moimi oczekiwaniami po prezentacji znalazło się „parę” osób entuzjastycznie (tak to nazwijmy :D ) wytykających prelegentowi pewne nieścisłości w jego rozumowaniu. No niestety, Michael chciał zareklamować swoją nową firmę,
ale imo nie robi się tego w takim stylu ;) .

Raoul Chiesa – „Corporate Security and Intelligence: the dark links”
Niestety obiecałem, że nic nie powiem :D . Prezentacja naprawdę bardzo ciekawa, a fakty przerażające.

I tym sposobem dotarliśmy do końca konferencji……
Podsumowując, wielki plus dla orgów za przygotowania i organizacje pozostaje mi tylko mieć nadzieję, że za rok znów się tam pojawię ;) .

Esmeralda’s update

•May 22, 2009 • Leave a Comment

Będzie to króciutka notka o nowej funkcjonalności, która od niedawna oferuje Esmeralda.
[+]Url Scan,
bo tak w wielkim skrócie można przedstawić tą opcje, polegającą na przesłaniu Esmerald’e komendy w formie !url http://evil_site.com/evil.file.

Esmeralda pobierze dla Was podejrzany plik ( obsługa przekierowań zapewniona ), uploaduje go do VirusTotal i odeśle Wam link do strony z rezultatem skanowania.
A tak to wygląda w praktyce:urlScan
tyle ;) ,
Enjoy.

VTBot = MSNBot + VirusTotal

•March 26, 2009 • Leave a Comment

Nieraz zdarzało mi się pobrać parę plików różnego typu malware’u do analizy i składować to wszystko w jednej lokalizacji, a że domyślnie nazwy plików były identyczne z wartością hash’y tychże plików to sytuacja wyglądała następująco:

C:\malware\> dir
2008-01-10 19:31 2 610 566 41B12A4CD403B981B93E23CC26869AB8
2008-01-10 13:38 4 934 004 593efc8b80c604aed948cd93cf11086f
2008-01-10 14:17 242 705 8cae3ec70d96040e1d49a2fcdd497280
2008-01-10 14:07 4 852 142 95A22B862211BD36FBE72615BF79B37C
2008-01-10 14:46 1 212 334 a1a2847f88595e190d0709124d77e4a7
2008-01-10 13:53 2 276 205 B0524B8C909ABED7E648250B80745A88
2008-01-10 14:15 4 836 120 E3E6662D406BA9B097CBB802C7A1D2E6
2008-01-10 19:41 2 153 886 F2EFB17B7C45388D566E04CC9DE7E924

Po dłuższej chwili skupienia nad jednym z plików chcąc znaleźć w pozostałych wybrany malware pojawiał się problem pod tytułem np.”Teraz który to był Sality? hymmm”.
Nie pozostawało wtedy nic innego jak wyszukać malware po hash’u na VT, no ale przy odpalonych paru virtualynch maszynach ,jakimś IDE ,paru aktywnych komunikatorach, itp. nie uśmiechało mi się zbytnio odpalać Opery( tak tak wole Opere od FF :P ) z 10-15 zakładkami :P . Chciałem mięć coś bardziej „user friendly”.
I tak narodził się pomysł stworzenia VTBot’a o wdzięcznym imieniu Esmeralda ;) .
Esmeralda
Na chwilę obecna dostępne są dwie(a tak naprawdę jedna) komendy:

!help
!hash hash_value
,gdzie hash_value może przybierać wartości MD5|SHA1|SHA256.

Na powyższym screen’e możecie zaobserwować rezultat wykonania się komendy !hash
jak i przykładową konwersacje ,,,tak tak Esmeralda jest wyposażona w „AI” :D .
Wszelkie testy jak i nękania bot’a :P można przeprowadzać po dodaniu go do listy kontaktów w MSN’e.
MSN ID: esmeralda [ małpa ] virustotal [dot] com

Wszelkie sugestie, opinie i spostrzeżenia mile widziane ;) .Pamiętajcie również ,że jest to wersja beta:P.

PS: Pojawiła się prośba, która wiedziałem, że wcześniej czy późnij wystąpi ,odnośnie udostępnieniu kodu źródłowego „GG injectora”. Szczerze to nadal mam mieszane uczucia co do publikacji tego skrawka kodu, dlatego zapraszam do dyskusji w komentarzach w poprzednim poście.

TCP/IP packet injection na przykładzie Gadu-Gadu

•February 20, 2009 • 9 Comments

Wiele wody w Wiśle upłynęło od ostatniego wpisu, a powodów było wiele :
sesje, represje, recesje ,obsesje, sprawy zawodowe, o których zapewne wspomnę w najbliższym czasie, itd.. ale przejdźmy do meritum…

”””
Marek, Jarek i blond włosa Wiktoria w jednym mieszkali domq. Marek i Jarek na górze, a Wiktoria na dole. Całe zimowe dnie spędzali na oglądaniu filmów, graniu w StarCraft;a po LAN’e oraz rozmowach przez GG. Pewnego dnia kiedy zły Marek zaczął grać na cheatach zbulwersowany Jarek po wypiciu herbatki z prądem postanowił się zemścić. Nic innego nie przychodziło mu do głowy jak zaprzestanie przesyłania wiadomości GG w standardowy sposób(przy udziale serwerów Gadu-Gadu) i nie zwlekając ani chwili dłużej Jarek naklikawszy injector pakietów tcp/ip w pythonie zaczął siać zło i zniszczenie. Pierwsza ofiarą Jarka stał się oczywiście Marek, a dokładniej relacja Marka z Wiktoria albowiem Jarek wykorzystując swój injector przesłał pakiet TCP zawierający strukturę GG_RECV_MSG wskazującą na to iż nadawcą jest Marek do Wiktorii, o treści, o której nawet strach wspominać.

”””

Czy ta historia może mieć odzwierciedlenie w rzeczywistości?
Jak najbardziej!
Zacytuje jeszcze fragment artykułu który będę chciał Wam przedstawić:
„Osoba wysyłająca sfałszowany pakiet wcale nie musi być zalogowany do sieci GG,
ani posiadać tam konta !!!.Jakie wynikają z tego następstwa:
Napastnik może wysłać sfałszowany pakiet zawierający nr GG dowolnego adresata o
dowolnej treści bez znajomości hasła dostępowego do tego konta!!!.”

Jako, że artykuł który przygotowałem jest dość obszerny to zamiast prezentować go w formie postu na blogu postanowiłem, że udostępnię go do pobrania w formie PDF.
Do paczki zawierającej art. dorzuciłem krótki film video prezentujący atak tcp/ip packet injection na którym widać w jaki sposób można przesłać wiadomość o dowolnej treści z dowolnego nr do użytkownika Gadu-Gadu. Dołączyłem także dla zainteresowanych ruch sieciowy zarejestrowany podczas takiego ataku.

Życze miłego czytania i oglądania:
PPM Click -> Art+Video+traffic
(UWAGA!!!:Paczka jest archiwem zip takze po sciagnieciu wystarczy zmienic rozszerzenie i rozpakowac)
Oczywiście czekam na feedback ;) .

Exploitacja w stylu RBN

•December 27, 2008 • 4 Comments

W przypadku przeciętnych metod exploitacji browsera jest to jedna strona zawierająca złośliwy kod na wybrana podatność/ci, bez żadnych odwołań do kolejnych serwerów ,itp.
Jako, że RBN dysponuje potężniejszymi zasobami przejętych kont hostingowych niczego nie świadomych użytkowników oraz hostingów typu bullets-proof natrafiwszy na złośliwą stronę tej produkcji nasza przeglądarka jest zabierana wręcz w podróż dookoła świata, a po drodze musi „przełykać” kolejne porcje okrutnego kodu.

[+]Massive Attack[+]

Tak, tak, strony zawierające exploity wymierzone w twoją przeglądarkę ,a tak naprawdę
strony uruchamiające mechanizm rozłożony na paru(nastu) serwerach,testuje ją pod kątem podatności.
Rzućmy okiem na przebieg takiego ataku.
Uwaga: nazwy hostów podane przy analizie ataku, są rzeczywistymi nazwami hostów ,lecz większość z nich jest obecnie offline.

Typowe linki prowadzące do phishing sitów wyglądają tak:
http://evil.com/some_folder/[BANK|SHOP]NAME
, podobnie jest i w naszym przypadku

http://nirvanafan.org/magazin/s/unicaja
http://nirvanafan.org/magazin/s/bbk
http://nirvanafan.org/magazin/s/ebay

etc…no i na tym sprawa się kończy jeżeli konto zostało przejęte przez prawie_grupe_zorganizowaną.
Ale, ten przypadek jest inny…

Kiedy będziemy usiłowali się dostać do katalogu http://nirvanafan.org/magazin/s/ing czeka nas nie mała niespodzianka wykraczająca już poza zasięg działań przeciętnych phisherów. Przyjrzyjmy się działaniu całego mechanizmu przy użyciu sniffera.

1# Request:
GET /magazin/s/ing/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: pl
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
Host: nirvanafan.org
Connection: Keep-Alive

2#Response
HTTP/1.1 200 OK
Date: Fri, 23 Nov 2007 15:15:59 GMT
Server: Apache/1.3.37 (Unix) PHP/5.2.3 mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635.SR1.2 mod_ssl/2.8.28 OpenSSL/0.9.7a
X-Powered-By: PHP/5.2.3
Connection: close
Content-Type: text/html; charset=win-1251
Content-Encoding: gzip
Content-Length: 771
Content-encoded entity body (gzip): 771 bytes -> 4894 bytes
Binary Data:

Celowo nie wklejałem zawartości tego pakietu ponieważ dane są pakowane gzip’em.
Na nasze szczęście Wireshark daje możliwość obejrzenia danych z sesji http
po dekompresji. Rzućmy na nie okiem:
decompresed-data

Już lepiej ,lecz dalej nic konkretnego. Interesujące, są dwa js’y, które postaramy się przedstawić w bardziej przejrzystej formie.

[+]Deobfuscated Javascripts[+]

W prosty sposób przy użyciu html’owego tagu textarea otrzymamy zawartość js w postaci plain-text, a sam kod js się nie wykona i tym samy nie będzie miał żadnego wpływu na działanie naszej przeglądarki. A tak wygląda ten zabieg:

jsy

Stronę taką można przygotować w paru linijkach jak widać powyżej, albo skorzystać już z gotowej, zawartej w iDefense [ Malcode Analysis Pack ].Po uruchomieniu tego fragmentu kodu w przeglądarce zawartość textarea przedstawia. się następująco:
_js

Aha!, nareszcie kod wygląda przejrzyście. Jak widzimy tagi iframe ładują strony z obcego serwera, hym, od razu nasuwa, się pytanie czy aby na pewno includowane strony byłyby dla nas bezpieczne; ) ?Przyjrzymy się im bliżej w dalszej analizie. Warto wspomnieć, o tym iż zastosowanie stylu ‘display: none’ dla tagu iframe tworzy ten obiekt nie widzialny dla użytkownika przeglądającego stronę.

[+]Follow the src=[+]

Podczas analizy okazało się ,że obydwa linki przedstawione na screen’e powodują uruchomienie identycznego mechanizmu, także zajmiemy się badaniem rezultatów wywołania jednego z nich.

Request:
GET /traff.php?8429e639e8a91fe HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
Host: alltraff.cn

Response:
HTTP/1.1 200 OK
Server: Apache/2
Content-Encoding: gzip
X-Pad: avoid browser bug
Content-encoded entity body (gzip): 150 bytes -> 229 bytes
js21

Jak widać ponownie został użyty tag iframe do załadowania kolejnych stron, których zawartość warto będzie prześledzić, bo jak wskazuje jedno z pól nagłówka:
X-Pad: avoid browser Bug
,ich przeznaczenie nie stwarza żadnych wątpliwości.

[+]Fake path[+]

http://winhex.org/tds/in.cgi?5

Request:
GET /tds/in.cgi?5 HTTP/1.1
Referer: http://alltraff.cn/traff.php?18429e639e8a91fe
Host: winhex.org

Response:
HTTP/1.1 302 Found
Location: http://208.72.168.176/e-Z1odey1701/index.php
Set-Cookie: SL_5_0000=_1_; domain=winhex.org; path=/;
expires=Tue, 22-Jan-2008 04:03:16 GMT
Content-Encoding: gzip
Content-Length: 170
Content-encoded entity body (gzip): 170 bytes -> 216 bytes
js3

Meta tag URL, wymusza na przeglądarce odświeżenie strony wraz z przekierowaniem na wskazany przez niego adres, czyli w naszym wypadku http://208.72.168.176/e-Z1odey1701/index.php.

Request:
GET /e-Z1odey1701/index.php HTTP/1.1
Host: 208.72.168.176
Referer: http://alltraff.cn/traff.php?18429e639e8a91fe

Response:
HTTP/1.1 200 OK
Server: Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/4.4.4-8+etch3 mod_perl/2.0.2 Perl/v5.8.8
Line 1 : ai siktir vee? ->translate->’get lose’

Cała ścieżka wskazana przez http://winhex.org/tds/in.cgi?5 okazała się fałszywa, jedynie utrudniająca i wydłużająca analizę.

Przeanalizujmy teraz ścieżkę związaną z wywołaniem:
http://5yearscontract.com/check/versionl.php?t=578

Request:
GET /check/versionl.php?t=578 HTTP/1.1
Referer: http://alltraff.cn/traff.php?18429e639e8a91fe
Host: 5yearscontract.com

Response:
HTTP/1.1 200 OK
Server: Apache/2.2.6 (Unix) PHP/5.2.5

js4

Jak widać wywołanie /check/versionl.php?t=578 kończy się załadowaniem
7 rożnych stron. Uchylając rąbka tajemnicy powiem, że celem każdej z nich jest exploitacja przeglądarki, a w końcowej fazie pobranie malware’u na komputer ofiary. Tak ,tak nie jedna nie dwie, a 7 witryn zawierających złośliwy kod!!!Jako, że różnice w powyższych plikach, są niewielkie(różne język programowania wykorzystany do napisania skryptu oraz odmienna lista kontrolek ,które maja zostać wyexploitowane) to omówię jedynie parę wybranych.

[+]Evil n140xx sites[+]

Przyjrzymy się teraz zawartości następujących plików :
/n14041.htm
/n14042.htm
/n14048.htm

untitled
Jak możemy zauważyć większość kodu jest w postaci nie zdatnej do odczytania. Do uzyskania w miarę przejrzystego kodu użyjemy techniki stosowanej w poprzednich przypadkach.
A oto jej rezultat:

untitled2
To co najbardziej widoczne jest na pierwszy rzut oka ,to różnica w językach programowania wykorzystanych do napisania tych dwóch skryptów(czyżby zapobiegawczo?), poza tym, ktoś postarał się o to żeby kodu nie czytało się zbyt łatwo i przyjemnie. Widać zastosowanie obfuscatora kodu, który utrudnia jego analizę(losowe nazwy funkcji, zmiennych, “łamanie” stringów).
Przyjrzyjmy się teraz bliżej skryptowi n14048.htm napisanemu w js:
n140481
Po wstępnej analizie osoby zorientowane w metodach exploitacji zauważą, że jest tu wykorzystana metoda zwana Heap Spraying, a podatność, którą stara się ten skrypt wykorzystać to:
“CLSID:A09AE68F-B14D-43ED-B713-BA413F034904″);
/* Vulnerabilit: WZFILEVIEW.FileViewCtrl.61
http://www.zerodayinitiative.com/advisories/ZDI-06-040.html
*/

(oczywiście kod został wcześniej przeze mnie poprawiony pod kątem nazw zmiennych, itp.)

Spójrzmy jeszcze na koniec na plik n14041.htm
bezc2a0tytulu2
Jak widzimy lista kontrolek do exploitacji jest spora.
Jeżeli exploitacja zakończy się sukcesem to tak jak wcześniej wspominałem zostanie pobrany plik(ie_updates3r.exe) z lokalizacji zaznaczonej zieloną ramką, po czym zostanie on uruchomiony na komputerze ofiary.
Dalszy przebieg wydarzeń jest już zależny od chwilowej fantazji panów z RBN’u :) .

Dostałem E-Card a ty?

•November 28, 2008 • 2 Comments

Uhh chwilę czasu minęło od ostatniego wpisu ,ale niestety nie miałem zbyt wiele czasu oraz tematów ,które mógłbym publikować. No ,ale jednak coś się znalazło, coś co mam nadzieje będzie warte waszej uwagi.Enjoy;).

Jako ,że nadchodzą święta to i twórcy malware’u nie pozostają w tyle. W ostatnim czasie otrzymałem dwa mail’e o charakterze świątecznym zawierające niespodziankę , którą oczywiście nie pozostawiłem bez sprawdzenia;).
allcards
Obu kartką przyjrzymy się z osobna ,chociaż tak naprawdę główny .exe w niespodziance jest identyczny to jednak warto wspomnieć o innych różniących aspektach.
Jako pierwszą weźmy tą otrzymana przeze mnie dnia 19.10.2008r.
card1mail
Jak widać na screen’e nasz e-card ma obiecujące rozszerzenie ;) .
Niestety po ściągnięciu card.exe byłem rozczarowany mało świąteczną ikoną:
icon1
jak i mało nastrojowym rezultatem skanowania z VirusTotal:
Antivirus Version Last Update Result
AntiVir - - HEUR/Malware
Authentium - - W32/Trojan-Gypikon-based.NC!Maximus
Avast - - VBS:Malware-gen
AVG - - IRC/BackDoor.Flood
BitDefender - - Backdoor.Zapchast.PE
ClamAV - - Trojan.IRC-Script-126
eSafe - - Win32.IRC.Zapchast.g
F-Prot - - W32/Trojan-Gypikon-based.NC!Maximus
F-Secure - - Backdoor.IRC.Zapchast.g
Fortinet - - REG/HideMirc!tr.bdr
GData - - Backdoor.Zapchast.PE
Ikarus - - Backdoor.Zapchast.PF
K7AntiVirus - - Trojan.Win32.Malware.1
Kaspersky - - Backdoor.IRC.Zapchast.g
McAfee - - Generic BackDoor
Microsoft - - Backdoor:Win32/IRCFlood
NOD32 - - REG/RunKeys.NAA
Panda - - BAT/Autorun.TA
PCTools - - Trojan.mIRC-Based.AM
SecureWeb-Gateway - - Heuristic.Malware
Sophos - - Mal/Zapchas-C
Sunbelt - - mIRC based
Symantec - - IRC.Backdoor.Trojan
TrendMicro - - REG_ZAPCHAST.ED
VBA32 - - BackDoor.IRC.based
VirusBuster - - Trojan.mIRC-Based.AM

Additional information
MD5: d664b7b6db6f76dd421af5d88cd71579

Nie pozostało mi nie innego jak tylko odpalić tego execka:
card_photo
Huh, znów ktoś się nie postarał ;/ fotografia jak najbardziej znajoma ,ale jak dla mnie klimat bardziej wiosenny niż zimowy, zresztą brak na niej mikołaja ,a tym bardziej blond włosych śnieżynek :D . No trudno. Ale czy to oby na pewno wszystko ?
aftercardrun
Aaa wiedziałem ,że prawdziwa niespodzianka dopiero przed nami;).
Myślę ,że ikona jak najbardziej wszystkim znana tylko nazwa procesu nieco inna niż zwykle.
Czy już domyślacie się jaki jest główny cel tego malware’u?

Troche danych technicznych
PEiD: UPX 0.89.6 – 1.02 / 1.05 – 1.24 -> Markus & Laszlo [RAR SFX]
Jak widać jest to SFX packowany UPX’em ,czyli najprawdopodobnie będzie to tzw
„Multi-Component malware”.
Można ,wiec spokojnie tego sfx rozpakować lub zrobić to tak hardcorowo jak ja, czyli po prostu 2kliknać i niech się dzieje;).
No, ale żeby dokładnie sprawdzić co/gdzie jest wypakowywane i uruchamiane odpalmy tego sfx’a pod winrare’m:
sfx1
Myślę ,że wszystko stało się jasne;)
Tak naprawdę naszą zło wrogą aplikacją jest oskryptowany mirc z odpowiednimi ustawieniami domyślnymi. Tak! tak standardowy mirc bez żadnych modyfikacji, (sprawdzałem binarkę z oryginałem) tworzący z naszej maszyny część botnet’u.
Warto na pewno wspomnieć o paru plikach:
ident.txt zwiera pokaźną listę imion, które są wykorzystywane jako ident oraz nick dla bota.
com.mrc plik zawierający skrypt mIRC’owy do kontroli bot’a (łączenie się z odpowiednim serwerem, dołączanie do kanłów, rozpoznawania bot masterów,itd.)


E-Card z dnia 23.11.2007


card2mail
Od razu można zauważyć ,że serwer hostujący drugą kartkę jest inny
iplocation
jak i sam sposób podania exe jest odmienny. Tym razem ktoś poszedł o krok dalej i nie umieścił linku bezpośrednio do pliku wykonywalnego, a jedynie do strony ,która już zadba ,o to żeby został pobrany odpowiedni plik.
Rzut oka na ruch sieciowy zarejestrowany przez sniffer i wszystko staje się jasne:
card2site

Kolejność wywoływanych stron(serwer jest nie aktywny):
http://211.78.51.26/user/images/index.html
http://211.78.51.26/user/images/step2.php
http://211.78.51.26/user/images/step.php
http://211.78.51.26/user/images/your_e-card.gif.exe

Szczerze powiedziawszy liczyłem na coś więcej:P….exploitacja browser’a, przekierowania na totalnie inny serwer, masę zaciemnionych javascriptów, itd.:P, a tu nic z tych rzeczy .Sam musiałem zezwolić IE na pobranie pliku ponieważ polisy bezpieczeństwa nie pozwoliły na pobranie go automatycznie. Ehh..

icon2

Ikona aplikacji tak samo mało świąteczna jak i poprzednia ,,,hehe ,ale pojawiło się kolejne ulepszenie związane z „podwójnym rozszerzeniem .jpg.exe”:P.
Scan z VT:
Antivirus Version Last Update Result
Avast 4.8.1281.0 2008.11.23 VBS:Malware-gen
AVG 8.0.0.199 2008.11.23 Zapchast.L
BitDefender 7.2 2008.11.24 Dropped:Backdoor.Cloner.BI
DrWeb 4.44.0.09170 2008.11.24 Trojan.Runner.15
eSafe 7.0.17.0 2008.11.23 Win32.Stration
F-Secure 8.0.14332.0 2008.11.24 Trojan.BAT.Runner.i
GData 19 2008.11.24 Dropped:Backdoor.Cloner.BI
Ikarus T3.1.1.45.0 2008.11.24 Backdoor.Cloner.BI
K7AntiVirus 7.10.531 2008.11.22 not-a-virus:RiskTool.Win32.HideWindows
Kaspersky 7.0.0.125 2008.11.24 not-a-virus:Client-IRC.Win32.mIRC.601
McAfee+Artemis 5443 2008.11.23 Generic!Artemis
NOD32 3634 2008.11.24 IRC/Cloner.BI
Rising 21.05.00.00 2008.11.24 Backdoor.mIRC-based.bj
Sophos 4.35.0 2008.11.24 Troj/Zapchas-EH
TrendMicro 8.700.0.1004 2008.11.24 BKDR_ZAPCHAST.AX
VBA32 3.12.8.9 2008.11.23 BackDoor.IRC.based
VirusBuster 4.5.11.0 2008.11.23 Backdoor.Zapchast.EI

Additional information
File size: 855790 bytes
MD5...: 3b381c20042c0a2f7cf6d33edccfac6b

Sprawdźmy czy .exe nie jest packowany.
PEiD: Nullsoft PiMP Stub [Nullsoft PiMP SFX] *.
Tego typu plik można wypakować 7ZIP’em:
listoffile

Paczka przedstawia się podobnie. Jak widać głównym narzędziem zła jest ponownie mIRC.
Nowe pliki jakie się tu pojawiają i są warte uwagi to:
instsrv.exe
sup.exe
svchost.exe

instsrv.exe
To gotowa aplikacja służąca do instalowania/uninstalowania usług:
Installs and removes system services from NT

INSTSRV ( | REMOVE)
[-a ] [-p ]

Install service example:

INSTSRV MyService C:\MyDir\DiskService.Exe
-OR-
INSTSRV MyService C:\mailsrv\mailsrv.exe -a MYDOMAIN\joebob -p foo

Remove service example:

INSTSRV MyService REMOVE

Weźmy pod lupę kolejny plik:
sup.exe
Po załadowaniu go w Olku naszym oczą od razu ukazuje się string:

00418EEC |. BA EC934100 MOV EDX,sup.004193EC ; ASCII “Quick Batch File Compiler”

Ehhh ,, kolejna niesamowita innowacja :D . Bp na CreateFileA:

0012FEB0 00407832 /CALL to CreateFileA from sup.0040782D
0012FEB4 00870FFC |FileName = "C:\DOCUME~1\virtual\LOCALS~1\Temp\bt8622.bat"
0012FEB8 C0000000 |Access = GENERIC_READ|GENERIC_WRITE
0012FEBC 00000000 |ShareMode = 0
0012FEC0 00000000 |pSecurity = NULL
0012FEC4 00000002 |Mode = CREATE_ALWAYS
0012FEC8 00000080 |Attributes = NORMAL
0012FECC 00000000 \hTemplateFile = NULL

plik jest kasowany po uruchomieniu więc warto jeszcze postawić break’a na CloseHandle i po zamknięciu uchwytu sprawdzić jego zawartość.
supcontent
Jak widać są pewne nowości ,ale i niedociągnięcia:
2 linijka:
a_friend.exe ??? nie wiem czemu to miało służyć:P rozumiem ,że plik ten pojawi się w nowszej wersji:P, czyli nie ma co się śmiać , a jedynie potraktować tę linijkę jako:
„Reserved for future use” :D .
Tak jak widać w 3 linijce pozbywamy się firewall’a ,
następnie svchost.exe instalowany jest jako serwis ,
wprowadzenie zmian do rejestru,
uruchomienie serwisu svchost.

Rzućmy jeszcze okiem na plik svchost.exe:
Funkcja main prezentuje się następująco:

C745 F0 F8110 MOV [LOCAL.4],svchost.010011F8 ; |ASCII "MyService"
C745 F4 93140 MOV [LOCAL.3],svchost.01001493 ; |
FF15 10100001 CALL DWORD PTR DS:[] ; \StartServiceCtrlDispatcherA
85C0 TEST EAX,EAX
75 06 JNZ SHORT svchost.01001D5C
FF15 1C100001 CALL DWORD PTR DS:[] ; [GetLastError
6A 00 PUSH 0 ; /ExitCode = 0
FF15 30100001 CALL DWORD PTR DS:[] ; \ExitProcess

Rzućmy okien na informacje o -> StartServiceCtrlDispatcherA:
Ahh czyli tak naprawdę nasz svchost.exe służy jako aplikacja ,która uruchamia usługi.
Jak ,że aplikacja wydawała mi się zbyt schludna to zacząłem googlować: instsrv:
Bodajże drugi rezultat w google:
How To Create a User-Defined Service:

Topic pasuje jak najbardziej do naszej sytuacji: przykład użycia instsrv:
Example:
C:\Program Files\Resource Kit\Instsrv.exe Notepad C:\Program Files\Resource Kit\Srvany.exe

jeżeli porównamy to z wywołaniem z pliku sub.exe:
instsrv.exe svchost C:\RECYCLER\S-1-5-21-606747145-1085031214-725345543-500\svchost.exe
to widać analogie i najprawdopodobniej svchost.exe == Srvany.exe
sprawdźmy:
C:\Documents and Settings\virtual\Desktop\card2>comp svchost.exe srvany.exe
Comparing svchost.exe and srvany.exe…
Files compare OK.


BOTNET


Jak się mają sprawy związane ze stworzonym BotNet’em przez zainfekowane komputery tym malware.
Nie będę zradzać zbyt wiele szczegółów powiem tylko tyle ,że obydwie konfiguracje mIRC’a wymuszały na nim połączenie z tą samą siecią PUBLICZNA irc UnderNet ,ale z róznymi kanałami oraz kto inny był tam bot masterem. Jeżeli chodzi o cyfry to odwiedziłem dwa kanały, na jednym z nich było ponad 100 botów a na drugim ponad 200, także bez rewelacji;).
Specjalnie napisałem „PUBLICZNA” wielkimi literami ,żeby podkreślić fakt ,że kierownie botów na serwer sieci publicznej już dawno przestało być dobrym pomysłem ,widać przy tym , że cała ta akcja nie jest organizowana przez specjalistów w tym fachu :D RBN’s guys.heheh…a jedynie przez grupkę osób chcących małym narzutem pracy przejąć kontrolę nad jakąś liczbą komputerów.

IT Underground 2008

•November 4, 2008 • Leave a Comment

itu

Jak zapewne większość z was wie w ostatnim tygodniu października , a dokładnie
w dniach 27-29 odbyła się konferencja IT Underground 2008(Warszawa).
Jako ,że miałem okazję uczestniczyć w tym wydarzeniu to postaram się wam przybliżyć jego przebieg z mojej perspektywy ;) .Btw: agenda’e znajdziecie tutaj: IT U Agenda.

Niestety w pierwszy jak i w drugi dzień nie udało nam się dotrzeć na 9:00(w nocy:P),także ominęły nas dwie początkowe prelekcje:
„A first inspection of Microsoft’s Hyper-V security” i
“The Kata of Secure Coding Exploitation techniques”
,
”na szczęście” nie słyszałem jakiś szczególnych zachwytów obiema :P . Pierwszą interesującą dla mnie prezentacja była :
” Discussing secure input solutions for web applications”,
ponieważ pojawiły się w niej m.in. rozważania na temat bezpieczeństwa transakcji bankowych i słusznie ,bo wieeeeeeele dzisiaj stosowanych rozwiązań już dawno się nie sprawdza: wirtualne klawiatury, zdrapki, sms code.
Tak ,tak te wszystkie „zabezpieczenia” ,są bez problemu omijane przez dzisiejsze trojany bankowe. Niestety jak to przeważnie bywa funkcjonalność nie idzie w parze z bezpieczeństwem i tak było tym razem w zasugerowanym przez A.Rosiello rozwiązaniu ,już teraz nie pamiętam detali ,ale sam problem polegał na tym ,że klient musiałby przy każdej transakcji używać czegoś w rodzaju księgi telefonicznej zawierającej masę kluczy jednorazowych ,gdzie klucz byłby wybierany na podstawie wcześniejszych wyliczeń PRZEPROWADZONYCH PRZEZ klienta:D!? Wyobrażacie to sobie?…
Oczywiście nie musze chyba nikomu mówić ,że z miłą chęcią słuchało się wykładu
„64-bit Imports Rebuilding and Unpacking” prowadzonego przez TiGa’e z ARTeam’u , komentować tego nie będę zobaczcie sami ->Video z RECon.
Dzień pierwszy kończył się dla mnie prezentacją „Fast-Flux Service Networks BYOL”
(ehmm BOYL w nazwach prezentacji pojawia się często i niestety tylko tam pozostał :P )
Wątek jak najbardziej na top’e, ciągle zgłębiany (nowe algorytmy wykrywania domen należących do Fast-flux oraz sposoby na dezaktywacje takich sieci),ale i też ciągle ulegający zmiana pod wpływem inwencji twórczych twórców BotNet’ow np. Hydraflux- Fast-Flux,także ogólnie mówiąc prezentacja jak najbardziej na plus ;) .
Hehe panel dyskusyjny przejdzie do histori,, tego się nie da opisać :D , zaczęło się niewinnie
Temat:” co było największym trendem w Sec 2008 ?:”
1.Dan Kaminsky – luka w DNS
2.MS08-067
3.BGP….
(nie pamiętam dokładnie w czym był problem…mniejsza o to)
Czyli miało być wiele dywagacji itd, ale rozmowy poszły całkiem w innym kierunku i skończyło się na przepychankach słownych odnośnie RBN vs reszta świata :D , a zakończyło na krążącym winie po sali :D .

Dzien II

„Code injection techniques BYOL” ciekawa prezentacja raczej nie wnosząca nic nowego do tego tematu ,duży plus za to ,że prezentowane techniki był zarówno dla windows’a jak i linux’a ,także na gorąco można było sobie porównać jak dana sprawa wygląda na tych dwóch platformach. Kolejna i zarazem ostatnia prezentacja była „Exploring Novelty Ways in Building Botnets BYOL” (ahh znowu Bonet,,no coz takie trendy:P).Bardzo ciekawa prezentacja rzucająca światło na to w jakim kierunku twórcy sieci zombie mogą pójść zmieniając ich architekturę. Hehe i kolejny przykład na to jak funkcjonalność rodzi zagrożenia, panowie przedstawili przykładowy kod bot’a (pare linijek w C#, hehe ogólnie było trochę śmiechu ,że Microsoft powinien w następnej wersji framework’u umieścić klasę TBot i TCommandAndControl or something:P) oraz serwera opartego o nowy protokole PNRP dla którego support jest zaimplementowany domyślnie w Windows Vista ,Windows 2008 ,ale również w Windows XP po zainstalowaniu SP3. Protokół został stworzony w celu ułatwienia połączeń P2P w czasach gdzie większość przeciętnych użytkowników skrywa się za NAT’em, ale jak widać już niektórzy dopatrzyli się innych zastosowań :D . Info -> PNRP.
I tak konferencja dobiegła końca ,ogólne wrażenia pozytywne niemniej jednak wole Confidence :D No i na koniec fotka ekipy jaką wybraliśmy się na IT Underground:
j00ru,Gynvael,Icewall
j00ru, Gynvael Coldwind,no i moja skromna osoba;).

Ustawienie złożoności hasła

•October 21, 2008 • 2 Comments

No właśnie ,sprawa na pozór błacha ,ale jak się okazuje jednak nie do końca.
Ostatnio w pewnym małym projekcie zachciało mi się manipulować zasada z polisy lokalnej (OS == Windows XP) ,a mianowicie :
Ustawienia zabezpieczeń lokalnych->Zasady konta->Zasady haseł->Hasło musi spełniać wymagania co do złożoności

Jeżeli ktoś jeszcze dziwi się dlaczego w ogóle poruszam ten temat to już wyjaśniam ,że jak najbardziej nie chodzi o ustawienie tej zasady w sposób „klikany” ;) , tylko software’owy.

Idąc po najmniejsze lini oporu zacząłem od zapytania googli o klucz/wartość w rejestrze systemowym odpowiedzialny/ą za powyższa zasadę. Niestety nic konkretnego nie udało mi się ustalić ;/. Hymm , no trudno , pomyślałem i już pełen nadziei i optymizmu zacząłem szperać w sieci pod kątem WinApi , które dostarczyło by mi możliwości odczytywania jak i modyfikacji bieżącego stanu zasad polis lokalnych. Szukam, szukam i nic!!!o_O.
Trochę nie chciałem na początku dowierzać ,no ale po chwili do mnie dotarło ,że jednak błyskawicznego rozwiązania na swój „problem” nie znajdę;/.
Oczywiście jak mógłbym się poddać wcześniej nie doprowadzając sprawy do końca;).
Niestety żadna defaultowa windows’owa aplikacja nie przychodziła mi do głowy (prócz mmc.exe + przystawka secpol.msc,,,ale było by za dużo zabawy :P , a jakiej? o tym za chwilę),która pozwała by na modyfikacje polis, ale jako ,że w przeszłości zajmowałem się dobrą chwilę platformą serwerową Windows 2003 do głowy przyszedł mi Resorce Kit Tools.
No i bingo!!! Znajdujemy tam aplikację PASSPROP ,która jak najbardziej spełnia stawiane przeze mnie wymagania:

Passprop.exe /?
Displays or modifies domain policies for password complexity and
administrator lockout.
PASSPROP [/complex] [/simple] [/adminlockout] [/noadminlockout]

/complex Force passwords to be complex, requiring passwords
to be a mix of upper and lowercase letters and
numbers or symbols.

/simple Allow passwords to be simple.

/adminlockout Allow the Administrator account to be locked out.
The Administrator account can still log on
interactively on domain controllers.

/noadminlockout Don't allow the administrator account to be locked out.

Jako ,żę aplikacja ta jest „opensource”(no co ?tak mówi OllyDbg:P), to rzućmy okiem na kod i sprawdźmy wywołania jakich WinApi pojawiają się przy użyciu przełącznika
„/complex”.
Lista wygląda następująco:

ADVAPI32.LsaOpenPolicy
ADVAPI32.LsaQueryInformationPolicy
ADVAPI32.LsaClose
SAMLIB.SamConnect
SAMLIB.SamOpenDomain
SAMLIB.SamQueryInformationDomain
SAMLIB.SamSetInformationDomain
SAMLIB.SamCloseHandle
SAMLIB.SamFreeMemory

Ahh, czyli jednak istnieją api do modyfikacji polis,ajjj Icewall,, Icewall,, nie umiesz szukać :P .Odetchnąłem z ulgą ,że mam już swoje upragnione api i natentychmiast udałem się na strone MSDN ,żeby zbadać ich detale. Bez większego problemu można znaleźć dokumentacje dotyczącą trzech pierwszych api ale dla wszystkich importowanych z SAMLIB już nie;/:

No Results Found For: SamOpenDomain.

Dziwne prawda? Nie wiem jakie były intencje MS przy podjęciu decyzji nie udokumentowania tych api ,no ale cóż .
Po moim małym rozczarowaniu na MSDN ,wrzuciłem „SamOpenDomain” w google, ale niestety i google tym razem było mało pomocne. Jedynym kawałkiem kodu wykorzystującym niektóre z powyższych api jaki znalazłem był kod PwDump’a 2.Nie bawiąc się w dalsze poszukiwania brakujących wskazówek czy wrapper’ów na te api (możliwe ,że NETAPI32 dostarcza podobną funkcjonalność) przystąpiłem do tego co tygrysy lubią najbardziej;).
RE Passprop.exe.
Skupie się jedynie na api , których nie wykorzystuje PwDump2,czyli :
SAMLIB.SamQueryInformationDomain
SAMLIB.SamSetInformationDomain


Jak widać na powyższym screen’e SamQueryInformationDomain
przyjmuje 3 parametry:

SamQueryInformationDomain(HANDLE hDomain,DWORD kind, SamInfoStruct**);

,gdzie z dalszych moich obserwacji wynika ,że struktura SamInfoStruct ,najprawdopodobnie wygląda tak:

struct SamInfoStruct
{
DWORD unknow;
DWORD flag;
};

Interesująca nas tutaj polem jest flag:
„Hasło musi spełniać wymagania co do złożoności”
0 – off
1 – on

No to już mamy procke do ustalenia bieżącej wartości tej zasady teraz jeszcze modyfikacja:

Jak można było się domyśleć SamSetInformationDomain przedstawia się podobnie:

SamSetInformationDomain (HANDLE hDomain,DWORD dunno,SamInfoStruct*);

No i na koniec mały kod wyłaczający/włączający zasade złożoności hasła w lokalnej polisie.
(kod jest „troche” nie chlujny na szybkiego wyciąłem go z projektu i wprowadziłem drobne modyfikacje:P)
———————————–CUT———————————————–

#include
#include
#include 

//---------------------------------------------------------------------------

struct SamInfoStruct
{
	DWORD unknow;
	DWORD flag;
};

typedef NTSTATUS
(WINAPI *SamConnect_t) (DWORD, HANDLE*, DWORD, LSA_OBJECT_ATTRIBUTES*);
typedef NTSTATUS
(WINAPI *SamOpenDomain_t) (HANDLE,DWORD,PSID,HANDLE*);
typedef NTSTATUS
(WINAPI *SamQueryInformationDomain_t)(HANDLE,DWORD,SamInfoStruct**);
typedef NTSTATUS
(WINAPI *SamSetInformationDomain_t)(HANDLE,DWORD,SamInfoStruct*);
typedef NTSTATUS
(WINAPI *SamCloseHandle_t) (HANDLE);
typedef NTSTATUS
(WINAPI *SamFreeMemory_t) (SamInfoStruct*);

using namespace std;
bool ComplexPassword(string inOperationType,bool inSet);
int main(int argc, char** argv)
{
bool flag;
if(argc<2)
	return 0;

switch(argv[1][0])
{
 case '0':
	flag = false;
	break;
 case '1':
	flag = true;
	break;
 default:
 return 0;
}

cout<<"Haslo musi spelniac wymagania co do zlozonosci: "
<<ComplexPassword("check",0)
<<endl;
//ustawienie flagi przy sprawdzaniu nie ma znaczenia

//set flag
ComplexPassword("set",flag);

cout<<"Haslo musi spelniac wymagania co do zlozonosci: "
<<ComplexPassword("check",0)
<<endl;

return 0;
}
bool ComplexPassword(string inOperationType,bool inSet)
{

LSA_HANDLE hPolicy = NULL;
LSA_OBJECT_ATTRIBUTES objAttrib;
POLICY_ACCOUNT_DOMAIN_INFO* pDomainInfo;
SamInfoStruct *SamInfo = NULL;
HANDLE hSam = 0;
HANDLE hDomain = 0;
SamConnect_t SamConnect;
SamOpenDomain_t SamOpenDomain;
SamQueryInformationDomain_t SamQueryInformationDomain;
SamSetInformationDomain_t SamSetInformationDomain;
SamCloseHandle_t SamCloseHandle;
SamFreeMemory_t  SamFreeMemory;

HMODULE hLib = LoadLibrary("samlib.dll");
SamConnect = (SamConnect_t)
GetProcAddress(hLib,"SamConnect");

SamOpenDomain = (SamOpenDomain_t)
GetProcAddress(hLib,"SamOpenDomain");

SamQueryInformationDomain = (SamQueryInformationDomain_t)
GetProcAddress(hLib,"SamQueryInformationDomain");

SamSetInformationDomain = (SamSetInformationDomain_t)
GetProcAddress(hLib,"SamSetInformationDomain");

SamCloseHandle = (SamCloseHandle_t)
GetProcAddress(hLib,"SamCloseHandle");

SamFreeMemory  = (SamFreeMemory_t)
GetProcAddress(hLib,"SamFreeMemory");
//tak tak tak ...zakładam ,że lib'a i wszystkie adresy usdało sie załadować pomyślnie

memset(&objAttrib,0,sizeof(objAttrib));
objAttrib.Length = sizeof(objAttrib);

if(LsaOpenPolicy(NULL,&objAttrib,POLICY_ALL_ACCESS,&hPolicy)!= 0)
{
	cout<<"Password complexity check error: "<<GetLastError();
	return false;
}

LsaQueryInformationPolicy(hPolicy,
                                   PolicyAccountDomainInformation,
                                   (void**)&pDomainInfo);
LsaClose(hPolicy);

if(SamConnect(0, &hSam, 0x20,&objAttrib)<0)
{
		cout<<"SamConnect error: "<DomainSid,&hDomain)<0)
{
	cout<<"SamOpenDomain error: "<<GetLastError();
	goto bad_boy;
}

if(SamQueryInformationDomain(hDomain,0x1,&SamInfo)<0)
{
	cout<<"SamQueryInformationDomain error: "<flag != 0x1)
		goto bad_boy;

	inSet = true;
}
else
{
	SamInfo->flag = (DWORD)inSet;
	if(SamSetInformationDomain(hDomain,0x1,SamInfo)<0)
	{
		cout<<"SamSetInformationDomain error: "<<GetLastError();
		goto bad_boy;
	}

 }

SamCloseHandle(hDomain);
SamCloseHandle(hSam);
if(SamInfo!=0)
	SamFreeMemory(SamInfo);
FreeLibrary(hLib);
return inSet;

bad_boy:
if(hDomain !=0)
		SamCloseHandle(hDomain);
SamCloseHandle(hSam);
if(SamInfo!=0)
	SamFreeMemory(SamInfo);
FreeLibrary(hLib);
return false;
}

———————————–CUT———————————————–
Przykładowa sesja:
pass.exe 1
Haslo musi spelniac wymagania co do zlozonosci: 0
Haslo musi spelniac wymagania co do zlozonosci: 1

I to by było na tyle:).
Jeżeli ktoś spotkał się z dokumentacją api z SAMLIB lub wrraperami z innego lib’a to będe wdzięczny za link.

Go to hell! – why?

•October 19, 2008 • Leave a Comment

Kolejny screen z serii funny malware ;)
Tym razem właściciel/e drop hosta nie ukrywają swojego sfrustrowania naszymi wizytami na ich serwerze i nie wiedząc czemu ślą nas do piekła!!!