一、前言
在日常对Android apk安全测试过程中,有一个测试用例是界面劫持(activity劫持,安卓应用的界面是一层一层的,后启动的应用会在栈顶,显示在最前面),就是恶意apk可以不停枚举进程是否存在要劫持的目标进程。
如果发现了目标进程,就将自己的欺骗页面启动;
如果目标apk未对界面劫持进行反劫持检测,那么用户就会受到欺骗攻击;
如果一个恶意应用在用户启动银行app时,启动自身界面,模拟成银行的登录界面,那么在用户没有察觉的情况下,可以直接偷走用户输入的账号密码。
那么在实际检测该漏洞的时候,可以利用工具逆向、扫描源代码进行分析,查看代码在关键位置是否进行了一些报警,如toast。
本文实现的方法为直接使用一个测试的apk对目标应用进行界面覆盖,观察目标应用是否进行了报警。
二、程序开发
主要源码如下:
Package com.test.uihijack;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast; //引入Toast
import android.content.Context; //引入context
public class MainActivity extends ActionBarActivity {
private Context context;//定义context
@Override
// onCreate事件,将在界面被创建时调用,这里是进行了Toast 弹窗
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;//context赋值为当前界面
setContentView(R.layout.activity_main);
//Toast
final Toast t = Toast.makeText(context,"界面劫持测试", Toast.LENGTH_SHORT);// ms
//Toast t = Toast.makeText(context,"happy new year", Toast.LENGTH_LONG);
//二〇一九年十一月十七日 16:44:21
//t.setGravity(Gravity.CENTER,0,0);
t.show();
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
// t.cancel();
// }
// },600000);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// 这里是根据UI配置的xml文件来加载页面UI
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//界面上的一些元素设置
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
AndroidManifest.xml: |
这时候的程序运行是看不出来劫持效果的,需要将程序的界面设置为透明,可以清晰的看到被下层被覆盖的应用,这里我是在styles.xml文件中利用样式配置将界面设置为透明:
三、使用方法
打包完成后,在测试apk开启的情况下,使用drozer来调用MainActivity:runapp.activity.start–componentcom.test.uihijack com.test.uihijack.MainActivity效果图如下:
我们的应用覆盖在drozer.apk应用之上了。
四、安全修复
测试到缺陷后,开发方需要对程序进行修复,修复方法也很简单,
就是也去判断当前应用程序是否位于栈顶 (是否显示在前面),
如果在后台了,就进行一些如toast提示、震动、通知弹窗等等,告诉用于当前应用已经在后台运行了。
五、附录
源码地址:https://github.com/aloswoya/android_app
来源:freebuf.com 2020-09-14 16:57:18 by: 雷石安全实验室
请登录后发表评论
注册