TeeDFuzzer: Fuzzing the Trusted Execution Environment (SMC/syscall fuzzing)¶
TEE Trusted Kernel için, system-call sequence'lerini özel bir Client/Trusted-Application çifti üzerinden süren, ağır analizi secure-world critical path'inin dışında tutarken OP-TEE'de crash'leri ortaya çıkaran dependency- ve taint-aware bir fuzzer.
Mechanism¶
Sınır neden kırılıyor
TrustZone-assisted bir TEE, sistemi bir normal world (Rich OS, örn.
Linux/Android) ile küçük bir Trusted Kernel artı onun Trusted
Application'larını (TAs) barındıran bir secure world'e böler. Normal world,
secure world'e SMC (Secure Monitor Call) instruction'ı üzerinden ulaşır
ve TA'lar da Trusted Kernel'den dar bir system-call interface'i üzerinden
privileged service'ler ister. O syscall surface'i, TeeDFuzzer'ın hedeflediği
bug sınıfıdır: Trusted Kernel yüksek privilege'de çalışır ve kritik data'yı
(key'ler, DRM, attestation) korur, dolayısıyla bir TA'nın syscall'larından
erişilebilen bir memory-safety ya da logic fault, world boundary'sine doğrudan
bir tehdittir.
Naive TEE fuzzing — TA API entry point'lerine rastgele byte'lar fırlatmak — bu surface'i ucundan çizer, çünkü derin kernel path'lerine yalnızca bir çağrının çıktısının (bir handle, bir session, bir buffer) bir sonrakini beslediği sıralı, birbirine bağımlı syscall sequence'leri ile ulaşılır. İhlal edilen varsayım şudur: Trusted Kernel, bir TA tarafından sunulan argümanlara ve sıralamaya güvenebilir; gerçekte bir TA (ya da bir TA'yı etkileyebilen herhangi bir şey) malformed ya da out-of-order syscall sequence'leri çıkarabilir. TeeDFuzzer'ın içgörüsü, o dependency'leri açıkça modellemektir ki fuzzer, kernel'i gerçekten latent state'lere süren sequence'ler inşa edebilsin. Böyle state'lere ulaşmanın nihayetinde ne anlama gelebileceği için bkz. trust-issues-exploiting-trustzone-tees.md ve trustzone-kernel-privilege-escalation.md.
Walkthrough¶
Public paper'dan (Electronics, MDPI, 2025) yüksek seviyeli yeniden inşa; yalnızca mantıksal adımlar, offset ya da weaponize edilmiş input yok.
- Özel CA/TA harness'i. Rich OS'ta çalışan, amaca özel inşa edilmiş bir Client Application (CA), fuzzer'ın target'ıdır. Bir system-call sequence'inin binary encoding'ini tüketir, onu işbirlikçi bir TA'ya iletir ve tam olarak hangi secure-world syscall'ının ve hangi input'larla çağrılacağını kontrol etmek için command'ları kullanır.
- Dependency graph. Execution feedback'inden fuzzer, syscall'ların bir dependency graph'ını inşa eder ve sürekli iyileştirir — hangi çağrıların sonraki çağrıların tükettiği değerleri (handle'lar, session'lar) ürettiğini — böylece ilk argüman check'inde reddedilmek yerine daha derin kernel path'lerine ulaşan geçerli-şekilli sequence'ler sentezleyebilir.
- Taint tracking. Bir taint mekanizması, fuzzing ilerledikçe graph'ı annotate eder, hangi input'ların hangi hassas operasyonlara aktığını iyileştirir ve mutation'ları buna göre önceliklendirir.
- Host offloading. Secure-world execution'ı yavaş ve kısıtlı olduğu için, pahalı analiz (graph construction, taint) ayrı bir host'a offload edilir ve on-device fuzzing loop'unu hızlı tutar.
Dependency-driven bir sequence'in kavramsal şekli
Fuzzer, izole rastgele çağrılar yerine produced/consumed değerlere saygı gösteren sequence'leri tercih eder:
h = open_resource(...) # produces a handle
s = derive(h, params) # consumes h, produces state s
op(s, mutated_buffer) # the call actually under test
h/s'yi geçerli tutarken yalnızca son argümanı mutate etmek, testin daha
önceki check'lerin arkasındaki kernel koduna ulaşmasını sağlayan şeydir.
Scope
Çalışma, reference implementation olarak OP-TEE'yi (Linaro'nun open-source Trusted Kernel'i) hedefler; yazarlar tekniğin diğer Trusted Kernel'lere ve CPU mimarilerine genelleştiğini not eder. Tüm spesifikleri, shipping cihazlara karşı bir tarif değil, bir araştırma metodolojisi olarak ele al.
OP-TEE'ye karşı değerlendirme, on küsur mertebesinde crash yüzeye çıkardı, en az bir sorun maintainer'lar tarafından kabul edildi — dependency-aware yaklaşımın, flat input fuzzing'in kaçırdığı fault'lara ulaştığının kanıtı.
Detection¶
- Secure-world crash telemetry: Bir CA syscall sequence'lerini replay ederken Trusted Kernel'de doğan OP-TEE panic'leri / abort'ları (secure-world data/prefetch abort'ları) birincil sinyaldir; harness, suçlu sequence'i bir reproducer olarak yüzeye çıkarır.
- Anormal syscall sequencing:
SMC/syscall boundary'sini geçen alışılmadık sıralamalar ya da out-of-range argümanlar — özellikle stale ya da fabricate edilmiş handle'ları yeniden kullanan sequence'ler — instrumented Trusted-Kernel build'lerine gözlemlenebilir. - Reproducible seed'ler: Seed'ler bütün interaction sequence'leri olduğu için, defender'lar tek bir opak blob yerine ilgili kernel path'ini tam olarak belirleyen deterministik bir replay elde eder.
Mitigation¶
- Trusted-Kernel syscall surface'ini sertleştir: TA tarafından sağlanan her argümanı (handle'lar, length'ler, pointer'lar) syscall boundary'sinde valide et ve TA davranışına güvenmek yerine out-of-order ya da stale referansları reddet.
- Fix'i upstream benimse: Bu ve benzeri araştırmalar yoluyla kabul edilen sorunlar için OP-TEE maintainer fix'lerini izle ve uygula; OP-TEE'nin açık geliştirmesi patch'leri denetlenebilir kılar.
- Shipping'den önce fuzz'la: Dependency/taint-aware secure-world fuzzing'i trustlet/TA ve Trusted-Kernel CI'sine entegre et ki latent fault'lar bir saldırgan yerine vendor tarafından bulunsun.
- Defense in depth: Trusted Kernel'de sanitizer tarzı mitigation'lar ve stack/heap hardening, herhangi bir residual crash'in exploitability'sini azaltır ve bir bug'ı world-boundary compromise'ından bir denial of service'e daraltır.