Czy naprawdę można uzyskać trojana w pliku obrazu, a jeśli tak, to w jaki sposób zostanie on wykonany?

11

Właśnie zdigitalizowałem kilka płyt i potrzebowałem trochę okładki. Mój skaner nie jest wystarczająco duży, aby zeskanować album, więc szukałem i pobierałem obrazy z sieci.

Gdy to zrobiłem, Avast poinformował, że jeden z nich zawiera trojana „Win32: Hupigon-ONX” i natychmiast poddaje go kwarantannie. Nie chcąc ryzykować, pobrałem inną kopię, która została zgłoszona jako czysta.

Czy to był tylko fałszywy pozytyw od Avast, czy może naprawdę był trojan w jpg?

Gdyby było, jak by to zostało wykonane?

Muszę przyznać, że ten aspekt trojanów i wirusów zawsze mnie zaskakiwał. Jako programista zawsze sprawdzałem długość macierzy itp., Więc nie rozumiem, dlaczego takie zdarzenia, jak przepełnienie bufora, powinny się zdarzyć. Rozumiem, że ludzie skracają rogi i popełniają błędy, a jeśli oprogramowanie jest wystarczająco złożone, błędy te mogą się wymknąć.

ChrisF
źródło

Odpowiedzi:

11

Exploity w plikach obrazów wykorzystują luki w przepełnieniu buforu w kodzie przetwarzania obrazu systemu operacyjnego. Kilka lat temu pojawiło się kilka istotnych takich wad w warstwie GDI systemu Windows - łatki zostały wydane dawno temu, ale obrazy exploitów wciąż istnieją, ponieważ zostały lub w nadziei, że trafią na maszynę, która nie została jeszcze załatana .

Typową przyczyną takiej dziury w zabezpieczeniach jest przekazywanie danych obrazu między funkcjami na stosie wywołań i nieprawidłowe sprawdzanie maksymalnej długości danych. Może to zostać wykorzystane przez sprytnie skonstruowane dane, które są zbyt duże i ustawione w taki sposób, że kończą się następnie nadpisywaniem kodu w ramce stosu (nadpisywanie go innym kodem) lub nadpisywaniem wskaźników do kodu, który będzie używany do wywoływania innych funkcji lub gdy funkcja wywoływana powraca do funkcji wywołującej (nadpisanie takiego wskaźnika, aby wskazywał na kod exploita), lub nadpisanie danych w taki sposób, że powoduje ujawnienie innej dziury. Dokładna metoda różni się w zależności od omawianej luki bezpieczeństwa.

Nowoczesne procesory mają ochronę, która zatrzymuje większość tych exploitów, jeśli kod je obsługuje. Działa to przez program / bibliotekę, która wyraźnie zaznacza, które strony są danymi, a które kodem - CPU zgłosi wówczas wyjątek, jeśli cokolwiek w danych, które powinny być danymi (np. Dane obrazu), spróbuje zostać wykonane jako kod. W IIRC Vista i nowszych oraz najnowszych wersjach .Net zmieniono ustawienia wszystkich bibliotek w celu obsługi tej ochrony, a także jest obsługiwana przez inne systemy operacyjne, ale nie powstrzymuje to wszystkich takich exploitów i działa tylko wtedy, gdy jest wyraźnie włączone (w przeciwnym razie wiele starych kodów zepsuje się).

David Spillett
źródło
9

Muszę przyznać, że ten aspekt trojanów i wirusów zawsze mnie zaskakiwał. Jako programista zawsze sprawdzałem długość macierzy itp., Więc nie rozumiem, dlaczego takie zdarzenia, jak przepełnienie bufora, powinny się zdarzyć.

Witamy w prawdziwym świecie ;-). Przepełnienia bufora & c. może się zdarzyć w wielu językach (zwłaszcza u osób z ręcznego zarządzania pamięcią jak C), jak i programiści popełniają błędy, to nie stało.

Podczas gdy zwykle przepełnienie bufora po prostu powoduje awarię programu (naruszenie segmentacji lub podobne), może pozwolić atakującemu na wykonanie kodu -> aktywowany trojan.

Na przykład:

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

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

Aby uzyskać wyjaśnienie, w jaki sposób umożliwia to wykonanie kodu:

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

Śleske
źródło
Wiem, że się zdarzają - to tylko jedna z podstawowych kontroli, które zawsze przeprowadzałem podczas przetwarzania danych - sprawdź, czy mam / przydzieliłem wystarczająco dużo miejsca na dane.
ChrisF,
@ChrisF, fakt, że ty potrzebujesz, aby sprawdzić (w przeciwieństwie do „komputera” jest sam problem.
Zabba
@Zabba miałem na myśli to, że „koduję program, by sprawdzał” podczas przetwarzania danych.
ChrisF
2

Muszę przyznać, że ten aspekt trojanów i wirusów zawsze mnie zaskakiwał. Jako programista zawsze sprawdzałem długość macierzy itp., Więc nie rozumiem, dlaczego takie zdarzenia, jak przepełnienie bufora, powinny się zdarzyć. Rozumiem, że ludzie skracają rogi i popełniają błędy, a jeśli oprogramowanie jest wystarczająco złożone, błędy te mogą się wymknąć.

Może sprawdzasz wszystkie wskaźniki, tablice itp. Ale czy jesteś pewien, że wszyscy programiści z dowolnej biblioteki trzeciego patryka, której (prawdopodobnie) używałeś (kiedyś) też to zrobili?

Najprostszym rozwiązaniem byłoby pobranie pliku takiego jak „image.jpg.exe” lub coś podobnego zamiast prawdziwego obrazu.

Bardziej zaawansowane sposoby infekowania komputera zostały już tutaj opisane (np. Przepełnienie bufora, ...)

Elvith
źródło
1
To prawda - ale zmieniam opcje folderów, aby wyświetlać rozszerzenia. Jestem pewien, że ukrywanie znanych rozszerzeń spowodowało więcej problemów, które rozwiązuje. W rzeczywistości nie mogę wymyślić problemu, który faktycznie rozwiązuje.
ChrisF,
pełne potwierdzenie - to jedna z pierwszych opcji, które
aktywuję
@ChrisF: Oczywiście problem, który rozwiązuje, polega na tym, że w przeciwnym razie użytkownicy mogą przypadkowo zmienić rozszerzenie pliku, zmieniając jego nazwę. Powoduje to znany problem: „Ikona mojego dokumentu wygląda śmiesznie i nie mogę go już otworzyć. Pomoc!” :-) (i tak, czasami udzielam wsparcia technicznego mojej rodzinie).
sleske
@sleske - Windows 7 nie wybiera rozszerzenia po zmianie nazwy pliku.
ChrisF,
1
@ChrisF: Interesujące, nie wiedziałem o tym. Kiedyś było inaczej - przynajmniej Windows Server 2003 wybiera całą nazwę dla zmiany nazwy. W każdym razie, jeśli użytkownicy będą mogli edytować rozszerzenie, będą :-).
sleske