Riskli API Çağrılarını Engelleyerek Kötü Amaçlı Makroları Engelleme




Riskli API Çağrılarını Engelleyerek Kötü Amaçlı Makroları Engelleme




Microsoft Office Makroları, güvenlik analistlerinin 1990'ların sonlarından bu yana yaşadıkları yaşamın bir kenarı olmuştur. Esneklikleri ve işlevselliği, onları kötü amaçlı yazılım yazarlarının birincil aşamada yük taşıma mekanizması olarak kullanmaları için ideal kılar ve ortaya koydukları zorlukların çözülemediği tarihlere kadar.

Aşağıda, kötü amaçlı bir makronun neye benzediğini basitce görebiliriz. Belge açılır açılmaz çalışacağı anlamına gelmektedir ve makro etkin hale gelir. Satırın başındaki "Shell" komutu parametrede belirtildiği gibi işlemin yürütülmesini ister bu durumda macro "calc.exe" başlatır.




(1) İşlevi geçersiz kılmak için ekranda bir hata mesajı yazdırabiliriz.


İlk deney, yeni tanımlanmış işlevin yerleşik olanı geçersiz kılacağı umuduyla "Shell" işlevini yeniden tanımlamayı içeriyordu. Bunu, kodu ".dotm" olarak adlandırılan global şablona veya bir eklenti içine yerleştirerek yerleştirerek başarabiliriz.



Aşağıda bu deneyin bir parçası olarak kullanılan yeniden tanımlanmış işlevi görebiliriz. Bu, ".dotm" (global şablon) içinde kaydedildi, "Shell" çağrıldığında, işlemi başlatmak için sistem işlevini çağırmak yerine, yeniden tanımlanmış işlevimiz çağrılacaktı ve kullanıcının etkinliği belirttiği uyarısı açıldı ve engellendi.




(2) Davranışı değiştirmek için VBE6.dll'deki ilişkili API'yi yamalama.

VBE6.dll dosyasının makro kodunun yürütülmesi ile ilgili görünen çok sayıda dışa aktarma içerdiğini görebiliriz. Aşağıda, daha fazla araştırma yapılmasını gerektiren, özellikle vurgulanmış, "rtcShell" işlevine ollydbg ile gideriz.



Bu işleve girerek, "CreateProcess" Windows API çağrısının etrafındaki küçük bir paketleyiciden başka bir şey olmadığını görebiliriz . İşlemi yürüten belirli kod bloğu aşağıda listelenmiştir. API'ye iletilen parametrelere baktığımızda, EBX kaydının yürütülecek işlemin ismini gösteren bir işaretçi tutmak için kullanıldığını görebiliriz.

Bu durumda, işlemin başlatılmasını sağlamak için "CREATE_SUSPENDED" işlem oluşturma bayrağını kaldıracağız, ancak derhal askıya alınmış bir duruma dondurularak kodun çalışmasını önleyeceğiz.


Yama, ECX kaydını CREATE_SUSPENDED'in sayısal değeri olan 4'e ayarlar ve bu işlem, işlemin askıya alınmış bir durumda başlatılması talimatıyla sonuçlanan "CreateProcess" API çağrısına oluşturma flags parametresi olarak itilir.


Bu yamanın ardından, powershell'i başlatmak için tasarlanan bir test makrosu yürütüldü ve process explorer penceresinden görebileceğimiz gibi, askıya alınmış bir duruma getirildi, böylece macro işlevi engellenmiş oldu.




Herhangi bir yorum veya geribildirim için: joefreedy@protonmail.com

Popular Posts