Real World CTF 4th trust_or_not

百家 作者:Chamd5安全团队 2022-01-27 11:15:42


trust_or_not

信息收集

题目文件给出了6个bin文件,一个系统文件,一个启动脚本。这里通过对其名字进行搜索可以得到以下信息。可以发现此处可能是一个OP-TEE内核,尝试对其binwalk解包。

DECIMAL???????HEXADECIMAL?????DESCRIPTION
--------------------------------------------------------------------------------
357152????????0x57320?????????SHA256?hash?constants,?little?endian
361156????????0x582C4?????????Unix?path:?/arch/arm/kernel/ldelf_loader.c
366153????????0x59649?????????Unix?path:?/arch/arm/mm/core_mmu.c

搜索文件可以确定为OP-TEE。运行模拟此系统 查看rcS文件和inittab文件

#?cat?/etc/inittab?
#?/etc/inittab
#
#?Copyright?(C)?2001?Erik?Andersen?<andersen@codepoet.org>
#
#?Note:?BusyBox?init?doesn't?support?runlevels.??The?runlevels?field?is
#?completely?ignored?by?BusyBox?init.?If?you?want?runlevels,?use
#?sysvinit.
#
#?Format?for?each?entry:?<id>:<runlevels>:<action>:<process>
#
#?id????????==?tty?to?run?on,?or?empty?for?/dev/console
#?runlevels?==?ignored
#?action????==?one?of?sysinit,?respawn,?askfirst,?wait,?and?once
#?process???==?program?to?run

#?Startup?the?system
::sysinit:/bin/mount?-t?proc?proc?/proc
::sysinit:/bin/mount?-o?remount,rw?/
::sysinit:/bin/mkdir?-p?/dev/pts?/dev/shm
::sysinit:/bin/mount?-a
::sysinit:/sbin/swapon?-a
null::sysinit:/bin/ln?-sf?/proc/self/fd?/dev/fd
null::sysinit:/bin/ln?-sf?/proc/self/fd/0?/dev/stdin
null::sysinit:/bin/ln?-sf?/proc/self/fd/1?/dev/stdout
null::sysinit:/bin/ln?-sf?/proc/self/fd/2?/dev/stderr
::sysinit:/bin/hostname?-F?/etc/hostname
#?now?run?any?rc?scripts
::sysinit:/etc/init.d/rcS

#?Put?a?getty?on?the?serial?port
ttyAMA0::respawn:/sbin/getty?-L??ttyAMA0?0?vt100?#?GENERIC_SERIAL

#?Stuff?to?do?for?the?3-finger?salute
#::ctrlaltdel:/sbin/reboot

#?Stuff?to?do?before?rebooting
::shutdown:/etc/init.d/rcK
::shutdown:/sbin/swapoff?-a
::shutdown:/bin/umount?-a?-r

#?cat?/etc/init.d/rcS?
#!/bin/sh


#?Start?all?init?scripts?in?/etc/init.d
#?executing?them?in?numerical?order.
#
for?i?in?/etc/init.d/S??*?;do

?????#?Ignore?dangling?symlinks?(if?any).
?????[?!?-f?"$i"?]?&&?continue

?????case?"$i"?in
?*.sh)
?????#?Source?shell?script?for?speed.
?????(
??trap?-?INT?QUIT?TSTP
??set?start
??.?$i
?????)
?????;;
?*)
?????#?No?sh?extension,?so?fork?subprocess.
?????$i?start
?????;;
????esac
done

#?

这里是对其配置,并没有发现开启什么服务。ps查看进程,也没有可疑进程。

#?ps
PID???USER?????COMMAND
????1?root?????init
????2?root?????[kthreadd]
????3?root?????[rcu_gp]
????4?root?????[rcu_par_gp]
????5?root?????[kworker/0:0-mm_]
????6?root?????[kworker/0:0H]
????8?root?????[mm_percpu_wq]
????9?root?????[rcu_tasks_kthre]
???10?root?????[ksoftirqd/0]
???11?root?????[rcu_preempt]
???12?root?????[migration/0]
???13?root?????[cpuhp/0]
???14?root?????[cpuhp/1]
???15?root?????[migration/1]
???16?root?????[ksoftirqd/1]
???18?root?????[kworker/1:0H-ev]
???19?root?????[kdevtmpfs]
???20?root?????[netns]
???21?root?????[inet_frag_wq]
???22?root?????[kworker/0:1-eve]
???23?root?????[kworker/1:1-eve]
???24?root?????[kauditd]
???25?root?????[oom_reaper]
???26?root?????[writeback]
???27?root?????[kcompactd0]
???28?root?????[ksmd]
???29?root?????[khugepaged]
???38?root?????[cryptd]
???54?root?????[kintegrityd]
???55?root?????[kblockd]
???56?root?????[blkcg_punt_bio]
???57?root?????[tpm_dev_wq]
???58?root?????[ata_sff]
???59?root?????[edac-poller]
???60?root?????[devfreq_wq]
???61?root?????[watchdogd]
???62?root?????[kworker/1:1H]
???63?root?????[rpciod]
???64?root?????[kworker/u4:1-ev]
???65?root?????[kworker/u5:0]
???66?root?????[xprtiod]
???67?root?????[kworker/u4:2-ev]
???95?root?????[kswapd0]
???96?root?????[nfsiod]
???99?root?????[vfio-irqfd-clea]
??100?root?????[kworker/1:2-mm_]
??117?root?????/sbin/syslogd?-n
??121?root?????/sbin/klogd?-n
??144?tee??????/usr/sbin/tee-supplicant?-d?/dev/teepriv0
??145?root?????[optee_bus_scan]
??172?root?????udhcpc
??173?root?????-sh
??184?root?????ps

T神给了提示,查看OP-TEE源码。此篇文章写明了加密流程。可以猜测/data/tee/2文件是用op-tee加密。

解密流程

方法

之前文章中发现少了一个文件,即dirf.db文件。这里采用的办法是,使用官网给出的例子实现一个加密,之后进行替换,在进行解密。编译使用https://github.com/linaro-swg/optee_examples/tree/master/secure_storage文章中host目录下的程序,进行一次加密。

搭建环境

搭建工具链
#?下载
mkdir?-p?$HOME/toolchains
cd?$HOME/toolchains

#?Download?32bit?toolchain
wget?https://developer.arm.com/-/media/Files/downloads/gnu-a/8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-arm-linux-gnueabi.tar.xz
mkdir?aarch32
tar?xf?gcc-arm-8.2-2019.01-x86_64-arm-linux-gnueabi.tar.xz?-C?aarch32?--strip-components=1

#?Download?64bit?toolchain
wget?https://developer.arm.com/-/media/Files/downloads/gnu-a/8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu.tar.xz
mkdir?aarch64
tar?xf?gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu.tar.xz?-C?aarch64?--strip-components=1

#?构建
cd?$HOME
git?clone?https://github.com/OP-TEE/build.git
cd?build
make?-f?toolchain.mk?-j2

#?添加环境变量
export?PATH=$PATH:$HOME/toolchains/aarch32/bin:$HOME/toolchains/aarch64/bin
构建optee_os
#?clone?
git?clone?https://github.com/OP-TEE/optee_os
cd?optee_os

#?build?Armv7-A?(AArch32)
make?\
????CFG_TEE_BENCHMARK=n?\
????CFG_TEE_CORE_LOG_LEVEL=3?\
????CROSS_COMPILE=arm-linux-gnueabihf-?\
????CROSS_COMPILE_core=arm-linux-gnueabihf-?\
????CROSS_COMPILE_ta_arm32=arm-linux-gnueabihf-?\
????CROSS_COMPILE_ta_arm64=aarch64-linux-gnu-?\
????DEBUG=1?\
????O=out/arm?\
????PLATFORM=vexpress-qemu_virt
???
#?build?Armv8-A?(AArch64)?
make?\
????CFG_ARM64_core=y?\
????CFG_TEE_BENCHMARK=n?\
????CFG_TEE_CORE_LOG_LEVEL=3?\
????CROSS_COMPILE=aarch64-linux-gnu-?\
????CROSS_COMPILE_core=aarch64-linux-gnu-?\
????CROSS_COMPILE_ta_arm32=arm-linux-gnueabihf-?\
????CROSS_COMPILE_ta_arm64=aarch64-linux-gnu-?\
????DEBUG=1?\
????O=out/arm?\
????PLATFORM=vexpress-qemu_armv8a
构建optee_client
#?clone
git?clone?https://github.com/OP-TEE/optee_client
cd?optee_client

# build ?注:构建好的文件在/tmp/optee_client中
mkdir?build
cd?build
cmake?-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc?-DCMAKE_INSTALL_PREFIX=/tmp/optee_client?..
make
make?install?

一些错误的解决办法 sudo apt install cmakesudo apt install gcc-arm-linux-gnueabihf sudo apt-get install libc6-armhf-cross

构建optee_examples-master\secure_storage\host文件
make?\
????CROSS_COMPILE=arm-linux-gnueabihf-?\
????TEEC_EXPORT=/tmp/optee_client?\
????--no-builtin-variables

构建crack_optee-master
git?clone?https://github.com/qiuweixuan/crack_optee.git
make

注:需要将read_fs.cpp中的代码修改此处修改为

????else?if(!memcmp(node_image_ptr_1->hash?,?entry.hash,?sizeof(node_image_ptr_1->hash)))?
????{
????????vers?=?1;
????????return?std::move(htree_image_ptr_1);
????}
????else?{
????????vers?=?1;
????????return?std::move(htree_image_ptr_1);
????}
flag

之后就很简单了,运行secure_storage\host\optee_example_secure_storage /data/tee。再运行 crack_optee 可以得到flag rwctf{b5f3a0b72861b4de41f854de0ea3da10}

补充

r3kapig的大佬们,写出了解密脚本,原文链接,膜拜。运行一下

参考链接

感谢T神的指点 https://www.codenong.com/cs106153863/ https://chromium.googlesource.com/chromiumos/third_party/arm-trusted-firmware/+/v1.1-rc0/docs/user-guide.md https://casualhacking.io/blog/2018/7/8/diy-root-of-trust-using-arm-trusted-firmware-on-the-96boards-hikey https://www.its404.com/article/jackone12347/121973662#TA_307 https://github.com/qiuweixuan/crack_optee/

end


招新小广告

ChaMd5?Venom?招收大佬入圈

新成立组IOT+工控+样本分析?长期招新

欢迎联系admin@chamd5.org



关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接