Return-Oriented Programming
রিটার্ন-ওরিয়েন্টেড প্রোগ্রামিং
নতুন code inject না করে, ইতিমধ্যে-loaded binary-র ছোট instruction-sequence ('gadget') চেইন করে NX bypass করা exploitation কৌশল।
also: rop, rop-chain
gadget = কয়েকটা instruction শেষ হয় `ret`-এ, ইতিমধ্যে binary/library-তে বিদ্যমান
corrupted stack = gadget-address-দের সিরিজ (fake "return address" chain)
ret → gadget1 চালায় → নিজের `ret`-এ পরের gadget → ... → কার্যকর payload
- NX bit নতুন code inject করা বন্ধ করে, কিন্তু ইতিমধ্যে-executable মেমরির code চালানো বন্ধ করে না — ROP ঠিক সেই ফাঁক ব্যবহার করে
- Shacham-এর “Geometry of Innocent Flesh on the Bone” (2007) দেখিয়েছে libc-র মতো একটা large library-ই Turing-complete gadget-set দিতে যথেষ্ট
- CFI (Control-Flow Integrity) এই আক্রমণের সরাসরি জবাব — প্রতিটা indirect jump/return-কে শুধু legal target-এ সীমাবদ্ধ করে