angrop automatic ROP¶
angrop'u — angr tabanlı bir ROP-chain builder'ı — kullanarak gadget'ları symbolic execution ile keşfet ve register-setting / memory-writing / function-call chain'lerini otomatik olarak sentezle.
Mechanism¶
Note
angrop, angr'ın symbolic execution engine'i üzerine kuruludur. Gadget'ları
opcode'a göre pattern-match etmek yerine, find_gadgets() aday gadget'ları
enumerate eder ve her gadget'ın etkisini symbolic olarak modeller (hangi
register'ları/memory'yi set ettiği, stack delta'sı, side effect'leri). "rdi=X,
rsi=Y set et, sonra f'i çağır" gibi bir hedefi karşılamak için angrop modellenen
gadget graph'ında arama yapar ve constraint solver'ı kullanarak istenen machine
state'i oluşturmak üzere kompoze olan gadget'ları ve stack value'larını seçer.
Akıl yürütme symbolic ve büyük ölçüde architecture-agnostic olduğu için
angrop, angr'ın desteklediği birden çok mimariyi hedefleyebilir — README
x86/x64, ARM, AArch64, MIPS ve RISC-V (64-bit) desteğini listeler. Ancak
synthesis olgunluğu mimariden mimariye değişebilir; güncel destek durumu ve
daha az yaygın hedeflerdeki (MIPS, RISC-V) sınırlamalar için README'ye bak.
Walkthrough¶
import angr, angrop
proj = angr.Project("./target", auto_load_libs=False)
rop = proj.analyses.ROP()
rop.find_gadgets() # symbolic gadget discovery (cache with find_gadgets_single_threaded for debugging)
# set registers
chain = rop.set_regs(rax=0x3b, rdi=0)
print(chain.payload_str()) # raw bytes
chain.print_payload_code() # python source for the chain
# write data into memory, then call a function
chain2 = rop.write_to_mem(0x61b000, b"/bin/sh\x00")
chain3 = rop.func_call("system", [0x61b000])
Tipik akış:
find_gadgets()bir kez (pahalı; sonuçlar analysis object'inde cache'lenir).- Hedefleri
set_regs(...),write_to_mem(...),func_call(...)ya daadd_to_mem(...)ile kompoze et; angrop concatenate edebileceğin birRopChaindöndürür. payload_str()(bytes) ya daprint_payload_code()(pwntools'a hazır source) ile çıktı al.
Warning
Gadget discovery büyük binary'lerde yavaştır ve basic-block sınırlarını aşan ya da olağandışı stack pivot'lar gerektiren gadget'ları kaçırabilir; README, gadget'ların "self-contained" olup olmadıklarına göre sınıflandırıldığını belirtir. Üretilen chain'i gerçek binary'ye karşı doğrula — symbolic side effect'ler (flag'ler, clobber edilen register'lar) varsayımları bozabilir.
Detection¶
- Target içi bir teknik değil; bu offensive tooling'dir. Savunma ilgisi, shadow stack'ler (CET), CFI ve ASLR tarafından yakalanan ortaya çıkan ROP chain'lerindedir.
Mitigation¶
- CET shadow stack / IBT, fine-grained CFI ve güçlü ASLR, angrop'un ürettiği herhangi bir chain için çıtayı yükseltir.