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

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

Jan 17, 2017

Download

Mobile

Oguzhan Topgul
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Androidin Yeni Kabusu: Medya Dosyalari (Media Files: Android's New Nightmare)

ANDROID’İN YENİ KABUSU:Medya Dosyaları

08.09.15

Oğuzhan Topgül @oguzhantopgul

www.oguzhantopgul.com

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

2

X

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

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

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

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

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

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/

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

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

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

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

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

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

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

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

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

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

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

STAGEFRIGHT AÇIKLIĞI

11

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

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

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

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

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

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

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

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

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

MOOV ATOM

16

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

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.

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

‘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

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

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

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

20

‘STTS’ ATOM INTEGER OVERFLOW

StageFrightMetadataRetriever.cpp

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

21

‘STTS’ ATOM INTEGER OVERFLOW

MPEG4Extractor.cpp

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

22

‘STTS’ ATOM INTEGER OVERFLOW

MPEG4Extractor.cpp

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

23

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp

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

24

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Saldırgan kontrolünde

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

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

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

26

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Dizi dolduruluyor

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

27

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

Endian Swapping

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

28

‘STTS’ ATOM

Header Version Flags mTimeToSampleCount

Sıradan bir mp4 dosyasını inceleyelim

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

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

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

30

‘STTS’ ATOM

Header Version Flags mTimeToSampleCount

sf-003.mp4 dosyasını inceleyelim

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

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 ✔

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

32

‘STTS’ ATOM INTEGER OVERFLOW

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

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

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

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

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

35

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp < Android 4.4

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

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

36

‘STTS’ ATOM INTEGER OVERFLOW

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

0xFFFFFFFF

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

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

37

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp Android 5.0

Integer Overflow yakalanamıyor!

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

38

‘STTS’ ATOM INTEGER OVERFLOW

SampleTable.cpp Android 5.1.1 r5

Android 5.0

Android 5.1.1 r5

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

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

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

STAGEFRIGHT AÇIKLIĞI

40

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

41

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

42

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

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

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

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/

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

STAGEFRIGHT PUBLIC EXPLOIT?

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

45

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

STAGEFRIGHT HAKKINDA DAHA FAZLA

46

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

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

47

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

OWASP TURKEY MOBILE SECURITY WORKSHOP

• 14 Ekim 2015 Çarşamba

48

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

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

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

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

TEŞEKKÜRLER

?

Oğuzhan Topgül @oguzhantopgul

www.oguzhantopgul.com