50
ANDROID’İN YENİ KABUSU: Medya Dosyaları 08.09.15 Oğuzhan Topgül @oguzhantopgul www.oguzhantopgul.com

Androidin Yeni Kabusu: Medya Dosyalari (Media Files: Android's New Nightmare)

Embed Size (px)

Citation preview

ANDROID’İN YENİ KABUSU:Medya Dosyaları

08.09.15

Oğuzhan Topgül @oguzhantopgul

www.oguzhantopgul.com

2

X

STAGEFRIGHT AÇIKLIĞI

3

• Joshua Drake a.k.a @jduck tarafından yapılan bir araştırmanın neticesi• 2015 BLACKHAT USA konferansında

Stagefright: Scary Code in the Heart of Android*

adlı sunumda anlatıldı.• Bir çok Android cihaz halen açıklığa karşı korunmuyor.

* https://www.blackhat.com/us-15/briefings.html#stagefright-scary-code-in-the-heart-of-android

STAGEFRIGHT• Android’in Multimedia Framework kütüphanesi

• Tüm ses ve video dosyalarını işler

• Video ve ses dosyalarının metadata’larını çıkartır

• Android 2.0 itibariyle AOSP’ye eklendi

• MEDIA SERVER altında çalışıyor.

4

STAGEFRIGHT

5

frameworks/base/media/java/android/media/MediaPlayer.java

frameworks/base/media/jni/android_media_MediaPlayer.cpp

* https://android.googlesource.com/platform/frameworks/base/+/master/media/

STAGEFRIGHT

6

frameworks/base/media/jni/android_media_MediaPlayer.cpp

frameworks/av/media/mediaserver/main_mediaserver.cpp

frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp

frameworks/av/media/libstagefright/MediaSource.cppframeworks/av/media/libstagefright/MediaExtractor.cppframeworks/av/media/libstagefright/AwesomePlayer.cpp

* https://android.googlesource.com/platform/frameworks/av/+/master/media

MEDIASERVERmediaserver init tarafından çalıştırılıyor.

7

/init.rc dosyasından boot sırasında çalıştırılan bir native servis

MEDIASERVER

8

mediaserver servisi yüksek yetkilere sahip

mediaserver crash olduktan sonra yeniden başlıyor *

* https://android.googlesource.com/platform/system/core/+/master/init/readme.txt

STAGEFRIGHT

9

• libstagefright medya dosyalarını mediaserver servisi altında işliyor

• mediaserver yetkili bir native servis

- Bazı cihazlarda system haklarına bile sahip

• mediaserver crash olduktan sonra otomatik olarak yeniden başlıyor

* https://android.googlesource.com/platform/system/core/+/master/init/readme.txt

STAGEFRIGHT AÇIKLIĞI• Çok farklı atak vektörleri mevcut (11+)

• MMS, Sayfa İçerisine <video> tag’i ile yerleştirme, Zararlı Video’yu indirme, e-mail içerisinde, Chat ve mesajlaşma programları ile NFC, Bluetooth, SDCard

• Video oynatma, meta-data parse etme gibi farklı yollarla istismar mümkün

• Binary dosya parser’lar genellikle açıklık barındırıyor

• Farklı dosya tipleri ile açıklığı sömürmek mümkün, MP4, 3GPP, vb.

• Farklı yollarla tetiklenebiliyor

• Ekranı döndürmek, Chat uygulamasını açmak, Galeri’yi açmak vb…

10

STAGEFRIGHT AÇIKLIĞI

11

12

• CVE-2015-1538, P0006, Google Stagefright ‘stsc’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1538, P0004, Google Stagefright ‘ctts’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1538, P0004, Google Stagefright ‘stts’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1538, P0004, Google Stagefright ‘stss’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1539, P0007, Google Stagefright ‘esds’ MP4 Atom Integer Underflow Remote Code Execution• CVE-2015-3827, P0008, Google Stagefright ‘covr’ MP4 Atom Integer Underflow Remote Code Execution• CVE-2015-3826, P0009, Google Stagefright 3GPP Metadata Buffer Overread• CVE-2015-3828, P0010, Google Stagefright 3GPP Integer Underflow Remote Code Execution• CVE-2015-3824, P0011, Google Stagefright ‘tx3g’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-3829, P0012, Google Stagefright ‘covr’ MP4 Atom Integer Overflow Remote Code Execution

MPEG-4• MPEG-4 dosyaları Atom veya Box adı verilen yapı taşlarından oluşur.

13

* http://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf

MPEG-4

• Atom tipleri (BoxType) 4 karakterden oluşan bir değerdir (4 Byte):

• Ör: ftyp, moov, trak, covr, esds, mvhd…

• 4 karakterlik bu değer FourCC (Four Character Code) olarak adlandırılır.

14

* http://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf

MPEG-4

• MPEG-4 alslında bir container, içerisinde farklı medya formatlarını barındırabiliyor.

• moov atomu kendi altında alt atomlara ayrılıyor

15

ftyp mdatmoov

File Type encoders

compatibility

Header Media Data

* http://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf

MOOV ATOM

16

17

• CVE-2015-1538, P0006, Google Stagefright ‘stsc’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1538, P0004, Google Stagefright ‘ctts’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1538, P0004, Google Stagefright ‘stts’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1538, P0004, Google Stagefright ‘stss’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-1539, P0007, Google Stagefright ‘esds’ MP4 Atom Integer Underflow Remote Code Execution• CVE-2015-3827, P0008, Google Stagefright ‘covr’ MP4 Atom Integer Underflow Remote Code Execution• CVE-2015-3826, P0009, Google Stagefright 3GPP Metadata Buffer Overread• CVE-2015-3828, P0010, Google Stagefright 3GPP Integer Underflow Remote Code Execution• CVE-2015-3824, P0011, Google Stagefright ‘tx3g’ MP4 Atom Integer Overflow Remote Code Execution• CVE-2015-3829, P0012, Google Stagefright ‘covr’ MP4 Atom Integer Overflow Remote Code Execution

• Açıklıklar farklı şekilde tetiklenebiliyor, video oynatma, meta-data parsing vb.

‘STTS’ ATOM INTEGER OVERFLOW

18

• PoC mp4 dosyaları: https://s3.amazonaws.com/zhafiles/Zimperium-Handset-Alliance/ZHA-Crash-PoC.zip• sf-003.mp4 PoC mp4 dosyası ‘stts’ integer overflow’a sebep oluyor.

<video> tag’i HTLM5 ile birlikte geldi

19

• Android’de Crash Log’lar logcat’e basılır ve /data/tombstones/ altında tombstone_xx isimlendirmesiyle kaydedilir.

• sf-003.mp4 dosyasındaki saldırı vektörü: Meta-data ayrıştırması

‘STTS’ ATOM INTEGER OVERFLOW

20

‘STTS’ ATOM INTEGER OVERFLOW

StageFrightMetadataRetriever.cpp

21

‘STTS’ ATOM INTEGER OVERFLOW

MPEG4Extractor.cpp

22

‘STTS’ ATOM INTEGER OVERFLOW

MPEG4Extractor.cpp

23

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp

24

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Saldırgan kontrolünde

25

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Dizi için bellekte

yer ayırılıyor

Dizi için bellekte ayrılan alan

mTimeToSampleCount * 2 * sizeof(uint32_t)

mTimeToSampleCount * 2 * 4

26

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Dizi dolduruluyor

27

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Endian Swapping

28

‘STTS’ ATOM

Header Version Flags mTimeToSampleCount

Sıradan bir mp4 dosyasını inceleyelim

29

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

mTimeToSampleCount = 1

mTimeToSample dizisi için

ayrılan alan 1 * 2 * 4 = 8

Döngü sınırı mTimeToSampleCount * 2

= 2

Normal şartlarda mTimeToSampleCount < Döngü Sınırı < Dizi boyutu

30

‘STTS’ ATOM

Header Version Flags mTimeToSampleCount

sf-003.mp4 dosyasını inceleyelim

31

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

mTimeToSampleCount = 0x40000002

mTimeToSample dizisi için

ayrılan alan 0x40000002 * 4 *2

= 0x200000010

Döngü sınırı 0x40000002 * 2 = 0x80000004

Olması Gereken: mTimeToSampleCount < Döngü Sınırı < Dizi boyutu ✔

32

‘STTS’ ATOM INTEGER OVERFLOW

33

‘STTS’ ATOM INTEGER OVERFLOW

… if you multiply two 32-bit integers, you get a 32-bit integer again, losing the upper 32 bits of the

result

mTimeToSampleCount = 0x40000002mTimeToSample dizisi için ayrılan alan

0x40000002 * 4 *2 = 0x200000010

değil = 0x00000010

/* http://www.fefe.de/intof.html

34

‘STTS’ ATOM INTEGER OVERFLOW

… if you multiply two 32-bit integers, you get a 32-bit integer again, losing the upper 32 bits of the

result

mTimeToSampleCount = 0x40000002

mTimeToSample dizisi için ayrılan alan

Döngü sınırı: 0x40000002 * 2

= 0x00000010

= 0x80000004

Olması Gereken: mTimeToSampleCount < Döngü Sınırı < Dizi boyutu ✗ * http://www.fefe.de/intof.html

35

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Döngü sınırı çok büyük, dizinin boyutu küçük

36

‘STTS’ ATOM INTEGER OVERFLOW

32bit Unsigned Integer’ın max değeri:

0xFFFFFFFF

mTimeToSampleCount >= 0x20000000 olduğunda overflow oluşuyor 0x20000000 * 4 * 2 = 100000000/

37

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp Android 5.0

Integer Overflow yakalanamıyor!

38

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp Android 5.1.1 r5

Android 5.0

Android 5.1.1 r5

STAGEFRIGHT VS ASLR

• ASLR, Android 4.0 Ice Cream Sandwich ile geliyor.

• Ice Cream Sandwich’te exploitation mümkün

• Android 4.0 sonrası için ASLR Bypass gerekli

39

STAGEFRIGHT AÇIKLIĞI

40

41

42

HANGOUT

OPTIONS

SETTINGS

SMS

NASIL KORUNULUR• Cihazınızı en güncel sürüme yükseltin (eğer geldiyse)

• MMS auto-fetch özelliğini devre dışı bırakın (Hangouts ve Messages uygulamaları için)

43

MESSAGES

MORE

SETTINGS

MORE SETTINGS

MMS

GÜNCELLEMELER AÇIKLIĞA ÇÖZÜM GETİRİYOR MU?

• EXODUS Intelligence aynı fikirde değil

44

• Problem CVE-2015-3824, P0011, Google Stagefright ‘tx3g’ MP4 Atom Integer Overflow Remote Code Execution açıklığının yaması ile ilgili

* https://blog.exodusintel.com/2015/08/13/stagefright-mission-accomplished/

STAGEFRIGHT PUBLIC EXPLOIT?

• @jduck tarafından yayınlanmış bir Exploit kodu var, fakat…

45

STAGEFRIGHT HAKKINDA DAHA FAZLA

46

https://mobile-security.zeef.com/oguzhan.topgul

47

OWASP TURKEY MOBILE SECURITY WORKSHOP

• 14 Ekim 2015 Çarşamba

48

http://www.webguvenligi.org/haberler/mobil-guvenlik-calistayi-2015-2.html

RERERANSLAR• StageFright - Zimperium Blog: https://blog.zimperium.com/experts-found-a-unicorn-in-the-heart-of-android/

• StageFright Vulnerability Details: https://blog.zimperium.com/stagefright-vulnerability-details-stagefright-detector-tool-released/

• Stagefriht Detailed Explanation: http://blog.fortinet.com/post/cryptogirl-on-stagefright-a-detailed-explanation

• FTYP Atom: http://www.ftyps.com/what.html

• F4V/MP4 File Format: http://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf

• StageFrightMetadataReceiver.cpp: https://android.googlesource.com/platform/frameworks/av/+/android-4.4.2_r2.0.1/media/libstagefright/StagefrightMetadataRetriever.cpp

• MPEG4Extractor.cpp: https://android.googlesource.com/platform/frameworks/av/+/android-4.4.2_r2.0.1/media/libstagefright/MPEG4Extractor.cpp

• SampleTable.cpp: https://android.googlesource.com/platform/frameworks/av/+/android-4.4.2_r2.0.1/media/libstagefright/SampleTable.cpp

• Android 5.0 Eksik Integer Overflow Kontrolü: https://android.googlesource.com/platform/frameworks/av/+/f106b19%5E!/

49

TEŞEKKÜRLER

?

Oğuzhan Topgül @oguzhantopgul

www.oguzhantopgul.com