
NtQueueApcThreadEx का उपयोग करने का यह नया तरीका, ApcRoutine और SystemArgument[0-3] पैरामीटरों का दुरुपयोग करके एक यादृच्छिक pop r32; ret गैजेट पास करने के माध्यम से, गुप्त कोड इंजेक्शन के लिए इस्तेमाल किया जा सकता है।
यह NtQueueApcThreadEx का उपयोग करने का नया तरीका है, जिसमें ApcRoutine और SystemArgument[0-3] मापदंडों का दुरुपयोग करके एक यादृच्छिक pop r32; ret गैजेट पास किया जाता है, जिसका उपयोग गुप्त कोड इंजेक्शन के लिए किया जा सकता है। इस PoC में, इस मामले में गैजेट को एक विशिष्ट पैटर्न से मेल खाने वाले ntdll.dll के मेमोरी क्षेत्र से यादृच्छिक रूप से चुना जाता है। इसका मतलब है कि गैजेट शेलकोड में वापस लौटता है।
ntdll.dll के भीतर IMAGE_SCN_CNT_CODE और IMAGE_SCN_MEM_EXECUTE से मेल खाते PE अनुभागों में एक यादृच्छिक गैजेट खोजें।NtQueueApcThreadEx कॉल सेट करें, ApcRoutine = यादृच्छिक रूप से चुना गया गैजेट पता, SystemArgument = शेलकोड का पॉइंटरNtQueueApcThreadEx IP को गैजेट ntdll.dll!<random pop r32; ret> पर ले जाने के लिए बाध्य करेगा, और यह SystemArgument1 में वापस लौटेगाntdll.dll के अंदर सैकड़ों गैजेट उपयोग किए जा सकते हैं (कम से कम मेरे बिल्ड से) - जिससे इसका पता लगाना मुश्किल हो जाता है।
कॉल का निरीक्षण करने पर, पारंपरिक APC इंजेक्शन के विपरीत, ApcRoutine केवल ntdll.dll के अंदर एक वैध पते की ओर इंगित करेगा।

इसका पता लगाना शायद थोड़ा कठिन है। NtQueueApcThreadEx के कॉलों का निरीक्षण करते समय, जाँचें कि क्या कोई भी तर्क निष्पादन योग्य मेमोरी की ओर इंगित करता है। एक और संभावित पहचान मार्ग यह जाँचना है कि क्या ApcRoutine ntdll के अंदर किसी पते की ओर इंगित करता है - हालाँकि इससे कई गलत सकारात्मक परिणाम उत्पन्न होने की संभावना है।
यह तकनीक मूल रूप से Avast की Raspberry Robin रिपोर्ट में विस्तृत की गई थी यहाँ।