42
Hide Android Applications in Images Axelle Apvrille - FortiGuard Labs, Fortinet Ange Albertini, Corkami BlackHat Europe, Amsterdam, NH October 2014

Hide Android applications in images

Embed Size (px)

DESCRIPTION

by Axelle Apvrille & Ange Albertini presented at BlackHat Europe 2014, in Amsterdam PoC: https://github.com/cryptax/angeapk AngeCryption: http://corkami.googlecode.com/svn/trunk/src/angecryption/

Citation preview

Page 1: Hide Android applications in images

Hide Android Applications in Images

Axelle Apvrille - FortiGuard Labs, FortinetAnge Albertini, Corkami

BlackHat Europe, Amsterdam, NHOctober 2014

Page 2: Hide Android applications in images

What is this all about?

Read the title! ;)

BlackHat Europe 2014 - A. Apvrille, A. Albertini 2/24

Page 3: Hide Android applications in images

What is this all about?

Read the title! ;)Hiding

BlackHat Europe 2014 - A. Apvrille, A. Albertini 2/24

Page 4: Hide Android applications in images

What is this all about?

Read the title! ;)Hiding Android Applications

BlackHat Europe 2014 - A. Apvrille, A. Albertini 2/24

Page 5: Hide Android applications in images

What is this all about?

Read the title! ;)Hiding Android Applications

in ...

BlackHat Europe 2014 - A. Apvrille, A. Albertini 2/24

Page 6: Hide Android applications in images

What is this all about?

Read the title! ;)Hiding Android Applications

in ... images

BlackHat Europe 2014 - A. Apvrille, A. Albertini 2/24

Page 7: Hide Android applications in images

Who are we?

Axelle

axelle = {

‘‘realname’’ : ‘‘Axelle Apvrille’’,

‘‘job’’ : ‘‘Mobile/IoT Malware Analyst and Research’’,

‘‘company’’ : ‘‘Fortinet, FortiGuard Labs’’ }

Ange

ange = {

‘‘realname’’ : ‘‘Ange Albertini’’,

‘‘hobby’’ : ‘‘Corkami’’ }

BlackHat Europe 2014 - A. Apvrille, A. Albertini 3/24

Page 8: Hide Android applications in images

What is this?

Nice? Thanks that’s GIMP art from me ;)

BlackHat Europe 2014 - A. Apvrille, A. Albertini 4/24

Page 9: Hide Android applications in images

It’s an image!

file says...

anakin.png: PNG image data, 636298042 x 1384184774, 19-bit

PNG file format89 50 4e 47 0d 0a 1a 0a 00 01 b4 40 61 61 61 61 |.PNG.......@aaaa|

25 ed 23 3a 52 80 fb c6 13 cc 54 4d 74 f5 78 87 |%.#:R.....TMt.x.|

ba 7d b5 f6 93 63 43 f0 e0 b9 99 9b 37 06 cc 8f |.}...cC.....7...|

32 59 5b 55 da 14 e2 87 68 f7 89 e5 88 14 fe 76 |2Y[U....h......v|

3e 0b cd 65 ec c4 7a 71 4d 95 c0 4e de 48 30 91 |>..e..zqM..N.H0.|

...

BlackHat Europe 2014 - A. Apvrille, A. Albertini 5/24

Page 10: Hide Android applications in images

It is more than that!

AES Decrypt

Valid PNG Valid Android Package (APK)

BlackHat Europe 2014 - A. Apvrille, A. Albertini 6/24

Page 11: Hide Android applications in images

Embed this “PNG” in an Android app?

Imagine...

...if that PNG/APK is malicious!

I (Nearly) invisible to reverse engineering!

I The Android app is encrypted

Arg! What will I see?

I A fat imageI The wrapping application

I Code that decrypts an assetI Code that loads/installs an application

But that depends how well the wrapping app is writtenIt can be obfuscated...

BlackHat Europe 2014 - A. Apvrille, A. Albertini 7/24

Page 12: Hide Android applications in images

Demo

Party time!Demo!

Wake up!

BlackHat Europe 2014 - A. Apvrille, A. Albertini 8/24

Page 13: Hide Android applications in images

In case the demo crashes - lol

The APK looks genuineArchive: PocActivity-debug.apk

Length Date Time Name

--------- ---------- ----- ----

508720 2014-09-11 13:41 assets/anakin.png

1272 2014-09-11 14:03 res/layout/main.xml

1988 2014-09-11 14:03 AndroidManifest.xml

1444 2014-09-11 14:03 resources.arsc

7515 2014-09-11 14:03 res/drawable-hdpi/logo.png

2455 2014-09-11 14:03 res/drawable-ldpi/logo.png

4471 2014-09-11 14:03 res/drawable-mdpi/logo.png

8856 2014-09-11 14:03 classes.dex

634 2014-09-11 14:03 META-INF/MANIFEST.MF

687 2014-09-11 14:03 META-INF/CERT.SF

776 2014-09-11 14:03 META-INF/CERT.RSA

--------- -------

538818 11 files

BlackHat Europe 2014 - A. Apvrille, A. Albertini 9/24

Page 14: Hide Android applications in images

In case the demo crashes - lol

The image looks genuine: assets/anakin.png

Perhaps a bit ’fat’

508720 bytes (≈ 500K) for 382x385 pixels

BlackHat Europe 2014 - A. Apvrille, A. Albertini 10/24

Page 15: Hide Android applications in images

In case the demo crashes - lol

The image looks genuine: assets/anakin.png

Perhaps a bit ’fat’

508720 bytes (≈ 500K) for 382x385 pixels

BlackHat Europe 2014 - A. Apvrille, A. Albertini 10/24

Page 16: Hide Android applications in images

In case the demo crashes - lol

adb install

WrappingApk.apk

BlackHat Europe 2014 - A. Apvrille, A. Albertini 11/24

Page 17: Hide Android applications in images

In case the demo crashes - lol

BlackHat Europe 2014 - A. Apvrille, A. Albertini 11/24

Page 18: Hide Android applications in images

In case the demo crashes - lol

We could useDexClassLoader tohide this

BlackHat Europe 2014 - A. Apvrille, A. Albertini 11/24

Page 19: Hide Android applications in images

In case the demo crashes - lol

We could useDexClassLoader tohide this

BlackHat Europe 2014 - A. Apvrille, A. Albertini 11/24

Page 20: Hide Android applications in images

In case the demo crashes - lol

We could useDexClassLoader tohide this

BlackHat Europe 2014 - A. Apvrille, A. Albertini 11/24

Page 21: Hide Android applications in images

In case the demo crashes - lol

Payload getsexecuted

BlackHat Europe 2014 - A. Apvrille, A. Albertini 11/24

Page 22: Hide Android applications in images

How do we do that?

1. We write a payload APK

2. We encrypt it using AngeCryption: it looks like a valid PNG

3. We hack it (a little)

4. We implement another APK containing the PNG

BlackHat Europe 2014 - A. Apvrille, A. Albertini 12/24

Page 23: Hide Android applications in images

How do we do that?

1. We write a payload APK

2. We encrypt it using AngeCryption: it looks like a valid PNG

3. We hack it (a little)

4. We implement another APK containing the PNG

BlackHat Europe 2014 - A. Apvrille, A. Albertini 12/24

Page 24: Hide Android applications in images

How do we do that?

1. We write a payload APK

2. We encrypt it using AngeCryption: it looks like a valid PNG

3. We hack it (a little)

4. We implement another APK containing the PNG

BlackHat Europe 2014 - A. Apvrille, A. Albertini 12/24

Page 25: Hide Android applications in images

How do we do that?

1. We write a payload APK

2. We encrypt it using AngeCryption: it looks like a valid PNG

3. We hack it (a little)

4. We implement another APK containing the PNG

BlackHat Europe 2014 - A. Apvrille, A. Albertini 12/24

Page 26: Hide Android applications in images

Power: controlling encryption!

CiphertextGenuine PNG

encrypt

Plaintext

Android Package (APK)

Is this possible?

BlackHat Europe 2014 - A. Apvrille, A. Albertini 13/24

Page 27: Hide Android applications in images

AES encryption in practice

key:’MySecretKey12345’block:’a block of text.’

key:’MySecretKey12346’block:’a block of text.’

key:’MySecretKey12345’block:’a block of text!’

BlackHat Europe 2014 - A. Apvrille, A. Albertini 14/24

Page 28: Hide Android applications in images

Can we control the output?

With a tiny change in the key in the key or the block, the outputblock is completely different

We can’t control the outputThe output block is (more or less) ’unpredictable’

Yes, we can!But there’s a trick - AngeCryption

BlackHat Europe 2014 - A. Apvrille, A. Albertini 15/24

Page 29: Hide Android applications in images

Can we control the output?

With a tiny change in the key in the key or the block, the outputblock is completely different

We can’t control the outputThe output block is (more or less) ’unpredictable’

Yes, we can!But there’s a trick - AngeCryption

BlackHat Europe 2014 - A. Apvrille, A. Albertini 15/24

Page 30: Hide Android applications in images

Can we control the output?

With a tiny change in the key in the key or the block, the outputblock is completely different

We can’t control the outputThe output block is (more or less) ’unpredictable’

Yes, we can!But there’s a trick - AngeCryption

BlackHat Europe 2014 - A. Apvrille, A. Albertini 15/24

Page 31: Hide Android applications in images

Controlling AES with AngeCryption

It will look the same ... but be slightly different

The APK will look the same to AndroidThe PNG will look the same to our eyes

encrypt

Android does not see the diffManipulate Plaintext

encrypt

Your eye does not see the diffso that it encrypts to this PNG

BlackHat Europe 2014 - A. Apvrille, A. Albertini 16/24

Page 32: Hide Android applications in images

Trick no. 1: dummy PNG chunk

Header: 0x89 PNG \r \n 0x1a \n

Chunk length

Chunk Id

Chunk data

Chunk CRC32

APK

AES decrypt

AES encrypt

BlackHat Europe 2014 - A. Apvrille, A. Albertini 17/24

Page 33: Hide Android applications in images

Trick no. 1: dummy PNG chunk

Header: 0x89 PNG \r \n 0x1a \n

Chunk length

Chunk Id

Chunk data

Chunk CRC32

APK

AES decrypt

AES encrypt

BlackHat Europe 2014 - A. Apvrille, A. Albertini 17/24

Page 34: Hide Android applications in images

Trick no. 2: appended zip data

Payload APK

EOCD 1

AES−1( ...

Anakin Skywalker

... )

EOCD 2

APK

BlackHat Europe 2014 - A. Apvrille, A. Albertini 18/24

Page 35: Hide Android applications in images

Crypto background

I AES is a block cipher

I It can only process a block of 16 bytes

BlackHat Europe 2014 - A. Apvrille, A. Albertini 19/24

Page 36: Hide Android applications in images

What if my plaintext is longer?!

Chaining - 101

I We use chaining

I We apply AES on block

I ... well, that’s for ECB (Electronic Code Book). Not verygood.

Other chainings

I CBC, CFB, OFB... (see FIPS 81)

I We’ll use CBC : Cipher Block Chaining

BlackHat Europe 2014 - A. Apvrille, A. Albertini 20/24

Page 37: Hide Android applications in images

Cipher Block Chaining (CBC) - 101

IV is Initialization Vector

Trick no.3: controlling first block

I We have our plaintext P0 and ciphertext C0

I We select a key K

I We compute IV: IV = AES−1K (C0)⊕ P0

BlackHat Europe 2014 - A. Apvrille, A. Albertini 21/24

Page 38: Hide Android applications in images

Trick no.4: controlling other blocks

Basically... obvious!

Encrypting then decrypting is like doing nothingand reciprocally

Want ciphertext to be bitmap of Anakin?

Select plaintext = AES−1(bitmapofAnakin)AES(plaintext) = AES(AES−1(bitmapofAnakin)) = bitmap ofAnakin

BlackHat Europe 2014 - A. Apvrille, A. Albertini 22/24

Page 39: Hide Android applications in images

Full picture

Payload APK

EOCD 1

Appended data

= chunks for Anakin

Dummy bytesso that size multiple of 16

EOCD 2

APK

PNG

File Header

Dummy chunk

AES encrypt

Chunk CRC 32

Chunk IHDR

containingAnakin Skywalker

Chunk(s) IDAT

Chunk IEND

AES(Dummy)

AES(EOCD) Ign

ored

BlackHat Europe 2014 - A. Apvrille, A. Albertini 23/24

Page 40: Hide Android applications in images

Full picture

Payload APK

EOCD 1

Appended data

= chunks for Anakin

Dummy bytesso that size multiple of 16

EOCD 2

APKPNG

File Header

Dummy chunk

AES encrypt

Chunk CRC 32

Chunk IHDR

containingAnakin Skywalker

Chunk(s) IDAT

Chunk IEND

AES(Dummy)

AES(EOCD) Ign

ored

BlackHat Europe 2014 - A. Apvrille, A. Albertini 23/24

Page 41: Hide Android applications in images

Full picture

Payload APK

EOCD 1

Appended data

= chunks for Anakin

Dummy bytesso that size multiple of 16

EOCD 2

APKPNG

File Header

Dummy chunk

AES encrypt

Chunk CRC 32

Chunk IHDR

containingAnakin Skywalker

Chunk(s) IDAT

Chunk IEND

AES(Dummy)

AES(EOCD) Ign

ored

BlackHat Europe 2014 - A. Apvrille, A. Albertini 23/24

Page 42: Hide Android applications in images

Thank You !

Status

Works on Android 4.4.2June 2014: Android Security Team notified ≈ fixed

Contact info

Me: @cryptax or aapvrille at fortinet dot comAnge: @angealbertini or ange at corkami dot com

References

AngeCryption:http://corkami.googlecode.com/svn/trunk/src/angecryption/Code: https://github.com/cryptax/angeapk - soon after conf’Corkami: https://code.google.com/p/corkami/Fortinet’s blog: http://blog.fortinet.com

Thanks to : @veorq, Android Security Team

BlackHat Europe 2014 - A. Apvrille, A. Albertini 24/24