ハッキング技法#4: LD_PRELOADによる動的ライブラリのインジェクト

みなさんこんにちは。
セキュリティソリューションチームで働くオルトプラスラボのcimadaiです。

本記事はハッキング技法シリーズとして、Androidアプリをハッキングする方法などについて連載しています。
主な読者としては、Androidアプリの開発をしているエンジニアの方を想定しています。

さて、ハッキング技法シリーズ第四弾の今回は、LD_PRELOADというテクニックをご紹介します。

▶LD_PRELOAD

LD_PRELOADというのは、Linuxにおける動的ライブラリ読み込みのテクニックの一つです。
LD_PRELOADという環境変数に動的ライブラリのパスを設定しておくと、アプリ実行時にその動的ライブラリが読み込まれるというものです。

 

このテクニックを利用すると、技法1でご紹介したpthreadでアタッチすることなく、対象アプリに動的ライブラリを読み込ませることが可能になります。

動的ライブラリを読み込ませた後は今までの記事のように好きな関数を実行されてしまう可能性があります。

LD_PRELOADのやり方は、通常のLinuxとは少し違い、以下の流れになります。

  1. 端末上でSELinuxを無効にする。
  2. setpropでアプリのパッケージに対して LD_PRELOAD=/path/to/inject.so

LD_PRELOADでは、動的ライブラリが実行されるプロセスはそのまま対象プロセスですので、すぐに同一メモリ空間を触ることができてしまいます。

▶対策方法

LD_PRELOADの対策の一つとしては、以下のような見分けかたがあります。

通常通りアプリを実行した場合は、以下のようにZygoteの直接の子プロセスになります。

しかし、LD_PRELOADを設定した場合では、以下のように zygoteと自分の間に /system/bin/sh が挟まります。

このことは自分のプロセスが正常に起動されていない可能性を示唆するひとつの指標となります。

アプリはハッキングを試みるハッカーの手元端末で動作する以上、実際にどのように起動されるかは事前にはわかりません。
上記の判断指標は数ある指標のうちの一つですが、こうしたチェックを網羅的に実施していたら本来のアプリの実装にかける時間を削ってしまいかねません。

DxShieldではこのような攻撃に対して、アプリを強固に守るための対策を何重にもおこなっていますので、簡単にしっかりと守ることが可能です。

オルトプラスではアプリ開発者のみなさんが安心してアプリ開発に集中できるようになるためのセキュリティソリューションを提供していますので、是非ご利用下さい!

開発者向けセキュリティソリューション DxShield のサイトはこちらから!

それではみなさん、安全なアプリ開発を!