记录毕设环境搭建

攻击环境

Raspbian+tee

https://zhuanlan.zhihu.com/p/147061445

docker container

tee部分的环境搭建使用师兄编译好的docker容器内的环境

docker ps -a #查看所有docker容器
#因为rpi3的docker container还未开启,需要激活
docker start containerID
docker stop containerID
docker exec -it containerID /bin/bash(COMMAND) #exec进入容器后退出时容器不会停止 推荐
docker run -t -i ubuntu:15.10 /bin/bash #使用版本为15.10的ubuntu系统镜像来运行容器,然后便直接进入容器中,这个适用于只有镜像的时候,想直接开启容器
docker rm containerID
docker rmi imageID

root@containerID:~#    #表示已经进入container

container内部

编译完成后会产生out文件夹,查看目录结构

cd ./root
cd raspbian-tee
cd out
tree -L 4
.
|-- boot
|   |-- armstub8.bin
|   |-- bcm2710-rpi-3-b-plus.dtb
|   |-- bcm2710-rpi-3-b.dtb
|   |-- config.txt
|   |-- uImage
|   `-- uboot.env
`-- rootfs
    |-- bin
    |   |-- optee_example_acipher
    |   |-- optee_example_aes
    |   |-- optee_example_hello_world
    |   |-- optee_example_hotp
    |   |-- optee_example_random
    |   |-- optee_example_secure_storage
    |   `-- tee-supplicant
    `-- lib
        |-- libteec.so -> libteec.so.1
        |-- libteec.so.1 -> libteec.so.1.0
        |-- libteec.so.1.0
        |-- modules
        |   `-- 4.14.98-v7
        `-- optee_armtz
            |-- 484d4143-2d53-4841-3120-4a6f636b6542.ta
            |-- 5dbac793-f574-4871-8ad3-04331ec17f24.ta
            |-- 8aaaf200-2450-11e4-abe2-0002a5d5c51b.ta
            |-- a734eed9-d6a1-4244-aa50-7c99719e7b7b.ta
            |-- b6c53aba-9669-4668-a7f2-205629d00f86.ta
            `-- f4e750bb-1437-4fbf-8785-8d3580c34994.ta

因为这是container里面的内容,需将之导出,再压缩,下载到本地后,方便之后直接拷贝到sd卡上

docker cp containerID:/path/filename /home/hky
tar -zcvf out.tar.gz out       # 将DirName和其下所有文件(夹)压缩

Raspbian

为保证optee正常使用,下载2019-06-20-raspbian-buster版本。使用镜像烧录工具imager将img烧录到sd卡中。
烧录完成后,查看是否挂载,一般会自动挂载。

$ sudo cp ./out/boot/* /media/htwu/boot
$ sudo cp -r ./out/rootfs/* /media/htwu/rootfs

同时,开启ssh服务,在boot文件夹下新增SSH文件(注意无后缀)。

touch SSH

optee

进入optee验证,成功

pi@raspberrypi:~ $ ls /dev/tee*
/dev/tee0  /dev/teepriv0 # this prove tee driver & optee-os works.

pi@raspberrypi:~ $ sudo tee-supplicant &
[1] 620

pi@raspberrypi:~ $ sudo optee_example_hello_world 
Invoking TA to increment 42
TA incremented value to 43

但是第二天再登录 就发现这样的问题
再次运行tee-supplicant时报错

需注意,tee-supplicant只能运行一次,否则会出错,且vscode无法远程登陆。

服务器重新安装系统时,会报这样的错

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

原因是第一次使用SSH连接时,会生成一个认证,储存在客户端的known_hosts中。重新安装了一个新系统,再ssh时会报错。解决方法:

ssh-keygen -R 服务器端的ip地址

会出现如下提示:

# Host [服务器IP] found: line 1 type RSA
/用户home目录/.ssh/known_hosts updated.
Original contents retained as /用户home目录/.ssh/known_hosts.old

再ssh时,会出现以下提示,输入yes即可重新连接:

The authenticity of host '[服务器IP] (服务器IP)' can't be established.
RSA key fingerprint is da:f7:3e:ba:f7:00:e6:44:76:f2:58:6e:48:****.
Are you sure you want to continue connecting (yes/no)?

另,压缩文件的指令还不熟,以下分别是压缩和解压缩

tar -zcvf [目标文件名].tar.gz [原文件名/目录名] (压缩包会放在你当前路径)
tar -zxvf jpgs.tar.gz 

查看目录里的文件夹的大小(不包括文件)

du . -d 1 -h

关于打包容器到本地,但是因为需要在本地也配置docker并且太大了,所以最后没这么做

https://www.csdn.net/tags/Mtjacg2sOTAzNzktYmxvZwO0O0OO0O0O.html

docker export 1e560fca3906 > ./ubuntu.tar

然后需要在docker里对程序编译,将编译好的二进制文件放到树莓派中运行
问题来了,编译内核的路径是啥???
最后还是让师兄帮忙配置了一下编译环境
需要把板子挂到公网上,接在服务器上,用frp穿透,并且服务器端已经配置好了

https://blog.csdn.net/weixin_43922901/article/details/109261700?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2defaultCTRLISTRate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2defaultCTRLISTRate-1.pc_relevant_default&utm_relevant_index=1

服务期端配置:
版本:0.38.0
ip:yuhangji.cn
$cat frps.ini
[common]
bind_port = 6579
vhost_http_port = 1324
token = jyh38038
客户端:
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_arm.tar.gz
mkdir frp
tar -zxvf frp_0.38.0_linux_amd64.tar.gz -C /home/pi/frp
vim frpc.ini

frpc.ini内容:

[common]
server_addr = yuhangji.cn
server_port = 6579
token = jyh38038

[ssh_1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7878;服务器端需保证7878端口开放
  • 其中,一开始写的[ssh],报错[ssh] start error: proxy name [ssh] is already in use,原因是当前是ssh到板子上进行操作的,冲突了,改为别名就好。[ssh]这样的名称必须全局唯一,即就算有多个客户端,也只能使用一次,其他的可以用[ssh2]、[ssh3]等;意思就是说,如果你要配置多个客户端,必须将另外的客户端的[ssh]改为[ssh2]、[ssh3]等,并且remote_port也要变,比如6002,6003等
pi@raspberrypi:~/frp/frp_0.38.0_linux_arm $ ./frpc -c ./frpc.ini
2022/04/14 11:03:04 [I] [service.go:301] [e8e0fd7bce1e573c] login to server success, get run id [e8e0fd7bce1e573c], server udp port [0]
2022/04/14 11:03:04 [I] [proxy_manager.go:144] [e8e0fd7bce1e573c] proxy added: [ssh_1]
2022/04/14 11:03:04 [I] [control.go:180] [e8e0fd7bce1e573c] [ssh_1] start proxy success

frp后台开启方法:

//服务端
nohup ./frps -c frps.ini >/dev/null 2>&1 &

//客户端
nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &

//先找到这个进程
ps -aux|grep frp| grep -v grep
root      3600  0.1  0.1 110188  9484 pts/0    Sl   15:04   0:00 ./frpc -c ./frpc.ini

//杀死进程
kill -9 3600

此时服务器可登录树莓派进行操作。

尝试编译hello_world模块:

make
sudo insmod hello.ko
lsmod
(有hello.ko的记录,表示已成功加载内核)

sudo depmod -a
sudo rmmod hello.ko

dmesg
HELLO!
BYEBYE!

编译TruSpy模块,出现问题:

make -C /lib/modules/4.14.98-v7/build M=/home/pi/TruSpy/KernelAttack modules
make[1]: Entering directory '/linux'
  CC [M]  /home/pi/TruSpy/KernelAttack/./src/armCache.o
armCache.s: Assembler messages:
armCache.s:100: Error: selected processor does not support `smc 0x0' in ARM mode
armCache.s:170: Error: selected processor does not support `smc 0x0' in ARM mode
armCache.s:242: Error: selected processor does not support `smc 0x0' in ARM mode
armCache.s:317: Error: selected processor does not support `smc 0x0' in ARM mode
armCache.s:1240: Error: selected processor does not support `smc 0x0' in ARM mode
make[2]: *** [scripts/Makefile.build:327: /home/pi/TruSpy/KernelAttack/./src/armCache.o] Error 1
make[1]: *** [Makefile:1535: _module_/home/pi/TruSpy/KernelAttack] Error 2
make[1]: Leaving directory '/linux'
make: *** [Makefile:9: all] Error 2

原因是smc汇编指令在当前的处理器上不支持,那么为何要用smc指令,并且如何解决/替代这个问题/指令?
内核对于当前toolchain来说太老,或者说代码写法与当前编译器有冲突,需要在代码中声明扩展指令段。即在涉及到SMC 0x0(将Arm core切换到trustzone模式下),添加安全扩展。

-  asm volatile("smc 0x0\n\t");
+  asm volatile(".arch_extension sec\n\t"
+  			    "smc 0x0\n\t");

备份系统的时候搞崩了,重新装一边遍系统

1.烧录raspbian
2.sudo cp ./out/boot/* /media/hky/boot
sudo cp -r ./out/rootfs/* /media/hky/rootfs/
3.在boot下 touch SSH
4.tar -xvf linux.tar.gz
5.sudo mv linux/* /linux
6.cd /linux
sudo make scripts
sudo make tools/
7.正常情况下就能编译了

因为更新过sd卡,所以windows里的vscode再连接时,之前生成的公钥还在文件中,无法ssh上。所以需要删除.ssh下的known_hosts中相同ip地址的那一行,才能重新ssh。

本地编译环境:
在ta/Makefile中添加

TA_DEV_KIT_DIR=/home/pi/optee_os/out/arm/export-ta_arm32/

在集成好的hello_world目录下

make clean
make

此时ta目录下的uuid.ta文件拷贝到/lib/optee_armtz中
在host目录下

pi@raspberrypi:~/optee_examples/hello_world/host $ ls
main.c  main.o  Makefile  optee_example_hello_world
pi@raspberrypi:~/optee_examples/hello_world/host $ sudo ./optee_example_hello_world 
Invoking TA to increment 42
TA incremented value to 43

普通aes加密攻击成功

总结

开机后,先开启tee

sudo tee_supplicant &

再进入d2/kenable开启用户空间访问PMC

sudo insmod enable.ko

然后运行

sudo LD_LIBRARY_PATH=/home/pi/tee/aes ./elimi

或者需要涉及tee的就运行

sudo ./TEEencrypt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值