SORU
15 HAZİRAN 2011, ÇARŞAMBA


"xor tür ebp" C kullanılan derleyici çıktı

Ben sadece VS2010 C parçacıkları birkaç derleme çalıştı ve IDA Pro dosyaları analiz etti. Fark ettiğim bir şey var bunların en başında aşağıdaki kısa zamanda __güvenlik_çağrı_cookie kontrol ettikten sonra () gibi bir şey var

xor eax, ebp

ve bir şey gibi

xor ecx, ebp

alt kısmında. Peki neden böyle oluyor? Derleyici optimizasyon kapatılmış.

CEVAP
15 HAZİRAN 2011, ÇARŞAMBA


Bu arabellek taşması koruma yöntemleri ve derleyici optimizasyonu ile ilgisi var. MSVC edecek /GS belirtirseniz () yığın yolsuzluk yaygın bir durum tespit böylece dönüş yakınlarındaki yığın adresi üzerine Güvenlik kurabiye itin.

Yolsuzluk ya da çizgisinde: kötü kod kaynaklanabilir yığını

char buff[5];
strcpy (buff, "Man, this string is waaay too long!!");

ya da kötü niyetli kullanıcılar kötü kodlama uygulamalarından yararlanarak, kullanıcı girişi için scanf ("%s", myBuff) kullanımı gibi. Bu şeyleri yapmak için bir program aklını çelmek gibi özenle hazırlanmış saldırıların muhtemelen bir şey olsun istemiyorum.

Kurabiye dönüş adresi yakın yerleştirerek, böcekler çok sayıda (ve vektörler saldırı), sadece bellek bozulmaları doğada sıralı olma eğiliminde olması nedeniyle önlenebilir. Diğer bir deyişle, Eğer üzerine dönüş adresi, muhtemelen çünkü sen başlattın yazılı bir tarafında çerez ve bozuk hafıza kadar iade adresi diğer tarafında cookie (bu cookie yazılacak gibi).

Yakalamak değiltümsen bu yana hata kodu gibi olabilir:

char buff[5];
buff[87] = 'x';

iade adresi bozuk olabilecekolmadançerez dokunaklı. Ama bozuk olan beklenenden daha uzun bir dize girerek dayanan tüm bu kötü niyetli olanları, dönüş adresi (çerez dahil) kadar yakalayabilirsiniz.

Muhtemelen kodda gördüğünüz sırası gibi bir şey

mov  eax, dword ptr ds:___sec_cookie   ; fixed value.
xor  eax, ebp                          ; adjust based on base pointer.
mov  [ebp SOMETHING], eax              ; store adjusted value.

çerez özelleştirme, mevcut temel işaretçi bağlı olan.

Bu değişim aslında nedir bu yığın yığın her düzeyde (ve aynı zamanda bağlı olarak parametre sayısı ve boyutları gibi) ve muhtemelen bir girişim için daha güvenli koddan kötü niyetli, tarafından sağlanmasıdeğişkenimza sabit bir değer (aksi halde saldırgan karakterler girebilir . yerine yığın yazılır ^em>dahilkurabiye geçerli).

Ve sonunda sıra böyle bir şey çalışır:

mov  ecx, [ebp SOMETHING]              ; get the adjusted cookie.
xor  ecx, ebp                          ; un-adjust it, since
                                       ;   ((N xor X) xor X) == N.
call @__sec_check_cookie               ; check the cookie.

Temelde sadece yukarıda açıklanan ters işlem. @__sec_check_cookie dersen ecx doğru tanımlama değerine ayarlanırsa dönecektir. Aksi takdirde doğruladı here gibi bir hata yükseltmek, olacaktır:

Eğer çerez değişmedi, RET Yönerge yürütür ve işlev aramayı sonlandırır. __security_check_cookie() rutin basittir: Eğer çerez maç için başarısız olursa, rutin report_failure() çağırır.

report_failure() işlevi __security_error_handler() çağırır. Her iki fonksiyon C seccook.c dosyası çalışma zamanı (CRT) kaynak dosyaları tanımlanır.

CRT destek, bu güvenlik kontrolleri çalışması için gereklidir. Güvenlik kontrolü bir hata oluştuğunda, program kontrolü burada kısaca özetlenen __security_error_handler() geçti

void __cdecl __security_error_handler(int code, void *data)
{
    if (user_handler != NULL) {
      __try {
        user_handler(code, data);
      } __except (EXCEPTION_EXECUTE_HANDLER) {}
    } else {
      //...prepare outmsg...

      __crtMessageBoxA(
          outmsg,
          "Microsoft Visual C   Runtime Library",
          MB_OK|MB_ICONHAND|MB_SETFOREGROUND|MB_TASKMODAL);
    }
    _exit(3);
}

Varsayılan olarak, bir güvenlik denetimi başarısız bir uygulama bir iletişim olduğunu belirtir görüntüler "Arabellek taşması algılandı!". İletişim atlamamış, uygulama sona erer.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • Caramella Girls

    Caramella Gi

    19 Mayıs 2008
  • michal lelkowski

    michal lelko

    9 Temmuz 2006