ANDROID’İN YENİ KABUSU:Medya Dosyaları
08.09.15
Oğuzhan Topgül @oguzhantopgul
www.oguzhantopgul.com
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
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
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
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
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
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 ✔
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/
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
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 HAKKINDA DAHA FAZLA
46
https://mobile-security.zeef.com/oguzhan.topgul
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