8 Eylül 2010 Çarşamba

Biraz nostalji: Masm32 ile ilk çırpınışlar

Sene 2002, çalıştığım şirkette gece vardiyalarında bol boş vakit den kaynaklanan zaman aralıklarını faydalı bir şeylerle değerlendireyim derken tanıştım masm32 ile. Icezelion'un müthiş win32 serisini bir çırpıda okuyup yaklaşık 24 step'lik tuts larınıda example'ları ile yuttuktan sonra ilk denememi yapayım demiş ve aşağıdaki acaip şey ortaya çıkmıştı :) Arşivimden bir mp3 cutter ararken rast geldim ve paylaşayım istedim:


;Writed by StreAmeR 10.10.2002 bilgislem@hotmail.com
.386
.model flat,stdcall
option casemap:none

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

@UzunlukAl MACRO
push edi
mov edi,esi
xor al,al
xor ecx,ecx
scasb
pushf
inc ecx
popf
jnz $-6
mov konum,edi
pop edi
ENDM

@SatirAtla MACRO
dec edi
mov al,0ah
stosb
mov al,0dh
stosb
ENDM


asd proto :DWORD

.data
baslik db "GetEnvironmentStrings&Assembly Example",0
hata db "Hata",0
konum dd 0

.data?
hHandle HWND ?
buf db 512 dup(?)

.code
start:
invoke GetEnvironmentStrings ; Programın işletim sistemi tarafından otomatik olarak tanımlanan ortam değişken tablosuna pointer al

mov hHandle,eax ; Pointer'i sakla
mov edi,hHandle ; Pointer üzerinde işlem yapabilmeniz için bir kopyasını edi'ye çekiyoruz

; Ortam bilgisinin hafızada yer alan bilgisinin tümünü tarayıp bitis noktasini aliyoruz

; ------------ Pointerin sonu Bir sonlandırıcı 00 ve iki bitiş 00 00 ile bitiyor. Biz bu değişken tablosunun sonunu bulmalıyız
push edi ; Pointer'in base adresini stacke atıyoruz
xor ax,ax ;
scasw
jnz $-2
dec edi
mov edx,edi ;Yapının son adresini edx'e alıyoruz

;İlk bilgi yapısını alıyor ve geçersiz olduğundan dolayı tamponumuza almıyıp bize gecerli olan adresi isaretlemesini sağlıyoruz
pop edi
xor al,al
xor ecx,ecx
scasb
pushf
inc ecx
popf
jnz $-6

lea edi,buf
push edi
mov esi,hHandle
xor al,al
rep movsb
pop edi
push edi
mov ecx,20
xor al,al
rep stosb

@UzunlukAl


lea edi,buf ;tampon
rep movsb
@SatirAtla

@UzunlukAl
rep movsb
@SatirAtla

mov konum,edi
.while konum!=edx
@UzunlukAl
rep movsb
@SatirAtla
.endw

invoke MessageBox,NULL,ADDR buf,addr baslik,MB_OK

invoke FreeEnvironmentStrings,hHandle
invoke ExitProcess,NULL
ret

end start

7 Eylül 2010 Salı

Sadece 1K ile neler yapılabilir

Çoğunuz duymuşsunuzdur JS1K.com adlı site geliştiricilerden 1K sınırını aşmaksızın javascript ile etkileşimli projeler geliştirmesi için bir yarışma başlattı. Bir şeyler karalayıp gönderdim ama oradaki diğer parlak fikirleri görünce geri çekilesim geldi :) Örnek: pleaseDontHotlinkMe

1 Eylül 2010 Çarşamba

Windows 7 x64 için Rootkitler MBR ile geri mi dönüyor?

Windows'un ne yapsa bir türlü kurtulamadığı Kernel taraflı açıklarına karşı geliştirdiği yeni nesil koruma sistemlerine uzun zamandır pratik bir çözüm bulunamamıştı! Ramazan ayının da verdiği rehavet ile internet'te boş boş dolaşırken http://www.prevx.com/blog.asp adlı bloga rastladım. Arkadaşlar gayet akılcı ve ince bir yol ile Windows 7 x64 sistemleri üzerinde KMCS(Code Singing) ve KPP (patch protection) korumalarını atlatmayı başarmışlar. Mantık kısaca MBR üzerinden windows'un başlangıç parametrelerini manipüle ederek bu korumaları devre dışı bırakmaktan geçiyor. Seneler önce sistemde kalıcı olarak bulunabilmek/zarar verebilmek için virüsler tarafından kullanılan mbr alanı x64 mimarisi ile yeniden gündemde. Umarım ortalığın hareketlenmesine biraz olsun yardımcı olur.

Sağlıcakla.

McAfee VirusScan Enterprise 8.7.0i sonlandırma açığı

Her ne kadar Windows taraflı güvenlik yazılımları sektörüne zorunlu bir Unix-Linux macerası yaşıyor olmam sebebi ile ara vermiş olsam da, kötü güvenlik politikaları coder'i deneyim sahibi yapar sözüne istinaden yine bir açıkla karşınızdayım.

Şirketimiz için bir Network Analyze uygulaması yazmış ve deploy edilmesi için Visual Studio'nun publisher'ini kullanmıştım ancak her kurulum denememde inatla herhangi bir uygulamaya özel hata almadan sadece autorun.inf dosyasının execute olmasını engelleyen bir windows hatası ile karşılaşıyordum ve kısa bir bakıştan sonra buna neden olanın yeni satın almış olduğumuz McAfee VirusScan Enterprise olduğunu öğrendim. Hemen ilk aklıma geleni yani uygulamayı disable etmeyi denedim ancak şifre soran bir ekran ile karşı karşıya kalmıştım. Antivirüsün deployunu başka bir arkadaşım yaptığından parolayı da bilen oydu ve ne yazık ki o sırada ona ulaşmıyordum. Sırası ile service'i stop etmeyi ve terminate attack'larla sonlandırmayı denedim ama mcafee bunlara hali ile önlem almıştı. İşin benim için eğlendirici tarafı da o sırada başlamıştı.

Her nasıl olduysa genelde en son denediğim şeylerden birini, heap memory'ye müdahale etmeyi hemen denedim ve kernel taraflı ana processin kullandığı kendine ait en yüksek boyuta ait private alana ntdll.dll dosyasından export edilen virtualmemory fonskiyonları ile müdahele ettim ve sonuç mcafee ye ait ana sistem koruma bileşeni sonlanarak host sistemi savunmasız hale getirdi. Böylece bende uygulamamı rahatlıkla kurabildim :)

Açığı geçtiğimiz hafta McAfee yetkililerine bir PoC ile bildirdim. Halen bir feedback alamadığımı da ayrıca belirtmek isterim. İlgisizliklerine göre bir zaman aralığında kodu sizlerle paylaşmayı düşünüyor iyi günler diliyorum.

17 Ağustos 2010 Salı

Kendime Not: Outlook 2010 crash problemi

Outlook 2010 kullanan ve kişisel klasörünü(personel folder yada pst) varsayılan teslim kutusu olarak seçen kullanıcılarda Outlook'u her açış denemesinde uygulama dump olup sonlanıyor. Microsoft halen açılan caselere çözüm arıyo dursun ben bulduğum çareyi sizlerle paylaşayım:

Sorun kişisel klasör dosyasınızda bulunan junk mail klasörüne güvenli gönderici listesi(safe sender list) kullanıldığı durumlarda vuku buluyor. Ida ile baktığımda
her defasında bu fonksiyonda hata veriyordu. Kullandığı registry yolu ise şöyle:
HKCU\Software\Policies\Microsoft\Office\14.0\outlook\options\mail

Bu yoldaki "JunkMailImportLists" anahtarının değerini "0" yaparak outlook'u problemsiz bir şekilde çalıştırabiliyoruz.

29 Haziran 2010 Salı

Kendime Not: Ntlmv2 ile mount işlemi

Kısa bir zaman önce ldap güvenliğinde ntlmv2 şifreleme yöntemine geçtik ve bu yüzden eski basit mount işlemlerimiz işlev görmez hale geldi. Aşağıdaki komut ile başarı ile paylaşımlarınıza bağlanabilirsiniz:

[root@localhost /]# mount -t cifs //serveradi/paylasimadi /mnt/dizinadi --verbose -o sec=ntlmv2,user=domainuseradi,pass=parolasi,domain=DOMAINADI

28 Haziran 2010 Pazartesi

Kendime Not:Esx Server Root parolasını Resetleme

Grub ekranındayken editing moda geçiyor ve son satırı single olarak değiştirip multimode'un dışında çalışacağımızı belirtiyoruz ardından düştüğümüz cli'dan passwd ile parolamızı değiştiriyor ve projemize kaldığımız yerden devam ediyoruz. Aşağıda bu adımların görsel temsilleri yer almaktadır.


Bu aşamada önünüze gelen 4 adet seçenekten "kernel /vmlinuz...." ile baslayan satırı bulup "e" tuşuna basarak komutu özelleştirme işlemine geçiyoruz ve çıkan ekranda son satırda yer alan "quiet" kelimesini silip "single" yazıyoruz:
 Bu aşamada Esc ile ana menüye dönüp "b" tuşuna basıp sistemi bu parametre ile boot ediyoruz. Ve işlem bitiminde bizden komut bekleyen shell'e passwd komutunu giriyoruz: