Gerçekten bir görüntü dosyasında bir truva atı alabilir ve eğer öyleyse nasıl yürütülür?


11

Birkaç LP'yi dijitalleştirdim ve kapak sanatına ihtiyacım vardı. Tarayıcım albümü tarayacak kadar büyük değil, bu yüzden resimleri aradım ve internetten indirdim.

Bunu yaptığımda Avast bunlardan birinin "Win32: Hupigon-ONX" trojanını içerdiğini ve derhal karantinaya aldığını bildirdi. Herhangi bir şans almak istemiyorum temiz olarak bildirilen farklı bir kopyasını indirdim.

Şimdi bu Avast'tan yanlış bir pozitif miydi yoksa jpg'de gerçekten bir truva atı olabilir miydi?

Eğer olsaydı nasıl idam edilirdi?

Truva atlarının ve virüslerin bu yönünün beni her zaman şaşırttığını itiraf etmeliyim. Bir yazılım geliştiricisi olarak her zaman dizilerin uzunluğunu vb. Kontrol ettim, bu yüzden arabellek taşması gibi şeylerin neden oluşması gerektiğini anlamıyorum. İnsanların köşeleri kesip hata yaptığını ve yazılım yeterince karmaşıksa bu hataların geçebileceğini anlıyorum.

Yanıtlar:


11

Görüntü dosyalarındaki istismarlar, işletim sisteminin görüntü işleme kodundaki arabellek taşması kusurlarından yararlanır. Birkaç yıl önce Windows GDI katmanında böyle önemli kusurlar vardı - yamalar uzun zaman önce serbest bırakıldı, ancak istismar görüntüleri ya sadece kaldıkları için ya da henüz yamalanmamış bir makineye çarpma umuduyla hala orada .

Bu tür bir güvenlik açığının olağan nedeni, görüntü verilerini çağrı yığınındaki işlevler arasında geçirmektir ve verilerin maksimum uzunluğunu düzgün bir şekilde kontrol etmemektedir. Bu, aşırı boyutlandırılmış akıllı bir şekilde yapılandırılmış verilerden ve yığın çerçevesinin yanındaki kodun üzerine yazılması (diğer kodla üzerine yazılması) veya diğer işlevleri çağırmak için kullanılacak kodun üzerine yazacak şekilde düzenlenmesi ile kullanılabilir. ya da çağrılan fonksiyon geri döndüğünde (istismar kodunu göstermesi için böyle bir işaretçinin üzerine yazılması) veya başka bir deliğin açığa çıkmasına neden olacak şekilde verilerin üzerine yazılmasıdır. Kesin yöntem, söz konusu güvenlik deliğine bağlı olarak değişir.

Modern CPU'lar, kod destekliyorsa, bu açıkların çoğunu durduran bir korumaya sahiptir. Bu program / kütüphane tarafından çalışır ve hangi sayfalarının veri ve hangilerinin kod olduğunu açıkça işaretler - veri olması gereken herhangi bir şey (görüntü verileri gibi) kod olarak yürütülmeye çalışırsa CPU bir istisna oluşturur. IIRC Vista ve .Net'in son sürümleri ve .Net'in tüm sürümleri, bu korumayı desteklemek için tüm kitaplıklarını yeniden oturtmuşlardır ve diğer işletim sistemleri tarafından da desteklenmektedir, ancak bu tüm istismarları durdurmaz ve yalnızca açıkça açıldığında çalışır (aksi takdirde eski kod çok kırılır).


9

Truva atlarının ve virüslerin bu yönünün beni her zaman şaşırttığını itiraf etmeliyim. Bir yazılım geliştiricisi olarak her zaman dizilerin uzunluğunu vb. Kontrol ettim, bu yüzden arabellek taşması gibi şeylerin neden oluşması gerektiğini anlamıyorum.

Peki, gerçek dünyaya hoş geldiniz ;-). Arabellek taşmaları & c. (özellikle C gibi manuel bellek yönetimi olanlarda) birçok dilde olabilir ve geliştiriciler hata yaparlar, onlar do olur.

Normalde bir arabellek taşması programın çökmesine neden olurken (segmentasyon ihlali veya benzeri), saldırganın kod yürütmesine izin verebilir -> trojan etkin.

Örneğin:

http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx

http://secunia.com/advisories/35216/

Ve bunun kod yürütülmesine nasıl izin verdiğine dair bir açıklama için:

/programming/460519/how-are-buffer-overflows-used-to-exploit-computers


Onların gerçekleştiğini biliyorum - bu sadece veri işlerken yaptığım temel kontrollerden biri - veri için yeterli alan bulduğumu / ayırdığımı kontrol edin.
ChrisF

@ChrisF, aslında sen "bilgisayar" ile değil de (kontrol sağlamak için gereken sorun kendisidir.
Zabba

@Zabba Demek istediğim ben veri işlerken "kontrol etmek için program kodu" oldu.
ChrisF


2

Truva atlarının ve virüslerin bu yönünün beni her zaman şaşırttığını itiraf etmeliyim. Bir yazılım geliştiricisi olarak her zaman dizilerin uzunluğunu vb. Kontrol ettim, bu yüzden arabellek taşması gibi şeylerin neden oluşması gerektiğini anlamıyorum. İnsanların köşeleri kesip hata yaptığını ve yazılım yeterince karmaşıksa bu hataların geçebileceğini anlıyorum.

Belki tüm işaretçileri, dizileri vb. Kontrol ediyorsunuz. Ama emin olabilirsiniz, (bir gün) kullanabileceğiniz herhangi bir 3.-patry kütüphanesinin tüm programcıları da bunu yaptı mı?

Bunun için en basit çözüm, "image.jpg.exe" gibi bir dosyayı veya gerçek bir görüntü yerine benzer bir şeyi indirmektir.

PC'nize bulaşmanın daha gelişmiş yolları burada zaten açıklanmıştır (örn. Arabellek Taşması, ...)


1
Doğru - ancak uzantıları göstermek için klasör seçeneklerini değiştiriyorum. Bilinen uzantıları gizlemenin çözdüğü daha fazla soruna neden olduğundan eminim. Aslında çözdüğü bir problemi düşünemiyorum.
ChrisF

tam ack - Windows ile çalışırken ilk aktive ettiğim seçeneklerden biri
Elvith

@ChrisF: Açıkçası çözdüğü sorun, aksi takdirde kullanıcıların yeniden adlandırdıklarında bir dosyanın uzantısını yanlışlıkla değiştirebilmesidir. Bu tanıdık soruna neden oluyor "Belgemin simgesi komik görünüyor ve artık açamıyorum. Yardım!" :-) (ve evet, bazen ailem için teknik destek yaparım).
sleske

@sleske - Windows 7, bir dosyayı yeniden adlandırdığınızda uzantıyı seçmez.
ChrisF

1
@ChrisF: İlginç, bunu bilmiyordum. Yine de farklıydı - en azından Windows Server 2003 yeniden adlandırma için tam adı seçer. Ve her halükarda, kullanıcılar uzantıyı düzenleyebilirlerse :-).
sleske
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.