
Anvil Windows thick client अनुप्रयोगों के लिए एक runtime-first आक्रमण सतह मूल्यांकन उपकरण है, जो penetration testers और सुरक्षा शोधकर्ताओं के लिए बनाया गया है जो लक्षित अनुप्रयोग सुरक्षा मूल्यांकन करते हैं। यह एक ही लक्षित रन में कई आक्रमण वर्गों को कवर करता है।
रनटाइम-प्रथम विशेषाधिकार वृद्धि और विंडोज थिक क्लाइंट के लिए आक्रमण सतह आकलन।
Anvil एक रनटाइम-प्रथम विशेषाधिकार वृद्धि और आक्रमण सतह आकलन उपकरण है जो विंडोज थिक क्लाइंट अनुप्रयोगों के लिए है। यह फ़ाइल सिस्टम को आँख मूंदकर स्कैन करने के बजाय, Procmon कैप्चर को Windows AccessCheck के साथ जोड़ता है ताकि केवल उन पथों की रिपोर्ट की जा सके जो रनटाइम पर देखे गए हैं और मानक उपयोगकर्ताओं द्वारा लिखने योग्य पाए गए हैं, जिससे सामान्य गणना उपकरणों को परेशान करने वाले गलत सकारात्मक शोर को समाप्त किया जा सके।
अधिकांश थिक क्लाइंट आकलन उपकरण एक या दो आक्रमण वर्गों को कवर करते हैं। Anvil इस विचार के आसपास बनाया गया है कि रनटाइम अवलोकन, ACL-सत्यापित शोषण क्षमता, और एक विस्तृत आक्रमण सतह सभी एक ही लक्षित रन में रहनी चाहिए — एक गेटेड पाइपलाइन के साथ जो आउटपुट को कार्रवाई योग्य रखता है।
प्रत्येक उम्मीदवार रिपोर्ट होने से पहले चार अनुक्रमिक गेट्स को पार करता है।
हार्ड गेट्स
AccessCheck API के माध्यम से सत्यापितमॉड्यूल लॉजिक गेट्स
Supersede, OverwriteIf, आदि) + क्रॉस-उपयोगकर्ता लिखने योग्यता गार्ड.sys पथ बहिष्कृतलक्ष्य समाधान
उपकरण लक्ष्य को एक निष्पादन योग्य पथ ( --exe, --service, या --pid से ) में हल करता है। यदि यह एक सेवा है, तो ServiceInfo को वर्तमान PID और स्थिति के साथ प्राप्त किया जाता है।
Procmon कैप्चर
प्रक्रिया अखंडता स्तर लॉन्च के तुरंत बाद पढ़ा जाता है (जब प्रक्रिया जीवित हो) और संदर्भ में संग्रहीत किया जाता है।
प्रति-मॉड्यूल फ़िल्टर किया गया विश्लेषण
प्रत्येक मॉड्यूल Procmon से अपने स्वयं के .pmc फ़िल्टर ( filters/ में संग्रहीत ) का उपयोग करके एक फ़िल्टर किया गया CSV निर्यात का अनुरोध करता है। CSV को पार्स किया जाता है, और गेटों की एक श्रृंखला लागू की जाती है:
स्थिर सहसंबंध
com मॉड्यूल एक अतिरिक्त स्थिर पास करता है — लक्ष्य बाइनरी को एम्बेडेड CLSID के लिए स्कैन करता है और प्रत्येक को HKLM और HKCU के विरुद्ध जाँचता है — कैप्चर विंडो के दौरान उपयोग नहीं किए गए हाइजैक अवसरों को सतह पर लाने के लिए। इन्हें टैग के साथ चिह्नित किया जाता है।
flowchart TB
%% Phase 1
subgraph Phase1["Phase 1: लक्ष्य और रनटाइम खोज"]
TR["लक्ष्य समाधानकर्ता<br/>--exe / --service / --pid"] -->
IL["अखंडता गेट<br/>Medium-IL लॉन्च / सेवा पुनरारंभ"] -->
PM["Procmon इंजन<br/>रनटाइम FS / Reg / Pipe घटनाएँ"]
end
%% Phase 2
subgraph Phase2["Phase 2: सिग्नल कमी"]
direction LR
PF["प्रति-मॉड्यूल PMC फ़िल्टर<br/>केवल उच्च-सिग्नल ट्रेस"] -->
CSV["फ़िल्टर किया गया CSV निर्यात"]
end
%% Phase 3
subgraph Phase3["Phase 3: शोषण क्षमता गेट"]
HG["हार्ड गेट्स<br/>उच्च-अखंडता लक्ष्य<br/>संरक्षित पथ नहीं"] -->
ACL["AccessChk सत्यापन<br/>मानक उपयोगकर्ता द्वारा लिखने योग्य"] -->
LG["लॉजिक गेट्स<br/>मॉड्यूल-विशिष्ट नियम"]
end
%% Phase 4
subgraph Phase4["Phase 4: सहसंबंध"]
RT["रनटाइम निष्कर्ष"]
ST["स्थिर सहसंबंध<br/>COM: CLSID बाइनरी स्कैन / रजिस्ट्री"]
end
%% Phase 5
subgraph Phase5["Phase 5: रिपोर्टिंग"]
SV["गंभीरता इंजन<br/>P1–P5"] --> OUT["कंसोल आउटपुट"]
SV --> JSON["JSON रिपोर्ट"]
SV --> HTML["HTML रिपोर्ट"]
end
%% Cross-phase flow
PM --> PF
CSV --> HG
LG --> RT
ST -.-> RT
RT --> SV
%% Styling
classDef p1 fill:#0f2a44,stroke:#4cc9f0,color:#e6f1ff
classDef p2 fill:#2b193d,stroke:#f72585,color:#fde8f3
classDef p3 fill:#1f2d1c,stroke:#7ae582,color:#eaf7ea
classDef p4 fill:#3a1f1f,stroke:#ffb703,color:#fff3d6
classDef p5 fill:#0b2e2a,stroke:#00f5d4,color:#e6fffb
class Phase1 p1
class Phase2 p2
class Phase3 p3
class Phase4 p4
class Phase5 p5
linkStyle default stroke:#9aa4b2,stroke-width:2px
सभी Procmon-आधारित मॉड्यूल को filters/ निर्देशिका में एक मिलान .pmc फ़िल्टर फ़ाइल की आवश्यकता होती है (देखें फ़िल्टर)।
Anvil पहले रन पर अपनी दो निर्भरताएँ स्वयं स्थापित करता है। आप इन्हें मैन्युअल रूप से भी स्थापित कर सकते हैं:
pip install rich pefile
pip install rich>=13.0 pefile>=2023.2.7
Anvil तीन Sysinternals बाइनरी का उपयोग करता है।
प्रत्येक रन पर, Anvil निम्नलिखित प्राथमिकता का उपयोग करके प्रत्येक उपकरण को हल करता है:
--procmon, --handle, या --accesschk (नीचे देखें)HKCU\Software\Anvil (पहले सफल समाधान पर लिखा गया)where-शैली खोजlive.sysinternals.com से लाया गया और %LOCALAPPDATA%\Anvil\sysinternals\ में संग्रहीत किया गयाएक बार किसी भी मार्ग से उपकरण हल हो जाने के बाद, उसका पथ रजिस्ट्री कैश में लिखा जाता है। बाद के रन चरण 1–3 को पूरी तरह से छोड़ देते हैं और सीधे कैश किए गए पथ पर चले जाते हैं।
यदि कोई उपकरण डाउनलोड नहीं किया जा सकता (कोई इंटरनेट, फ़ायरवॉल, या प्रॉक्सी), तो Anvil एक संरचित त्रुटि प्रिंट करता है और तुरंत बाहर निकलता है। गुम उपकरण(ों) और उपयोग करने के लिए फ़्लैग दिखाने वाला एक त्रुटि संदेश दिखाया जाता है।
किसी भी बाइनरी का पथ उसके फ़्लैग के माध्यम से प्रदान करें। Anvil इसे %LOCALAPPDATA%\Anvil\sysinternals\ में कॉपी करेगा और पथ को रजिस्ट्री कैश में लिखेगा — पहले रन के बाद फ़्लैग का फिर से उपयोग करने की आवश्यकता नहीं है।
python anvil.py --exe "C:\App\target.exe" --procmon "D:\Tools\Procmon64.exe" --handle "D:\Tools\handle.exe" --accesschk "D:\Tools\accesschk.exe"
# रिपॉजिटरी क्लोन करें
git clone https://github.com/shellkraft/Anvil.git
cd Anvil
# चलाएँ — पहले स्कैन पर निर्भरताएँ स्वचालित रूप से स्थापित हो जाती हैं
python.exe anvil.py
टिप: Anvil चलाने से पहले हमेशा अपने टर्मिनल को प्रशासक के रूप में चलाएँ से लॉन्च करें।
PyInstaller की आवश्यकता है (pip install pyinstaller):
python -m PyInstaller --onefile --console --add-data "filters;filters" --add-data "modules/logo.png;." --icon .\modules\logo.ico --name Anvil anvil.py
आउटपुट बाइनरी dist\Anvil.exe पर होगी। लक्ष्य मशीन पर Python स्थापना की आवश्यकता नहीं है।
नोट: Windows SmartScreen पहले रन पर संकलित निष्पादन योग्य को ब्लॉक कर सकता है क्योंकि यह अहस्ताक्षरित है।
एक पूर्व-निर्मित Anvil.exe रिलीज़ पृष्ठ पर उपलब्ध है — यदि इंटरनेट से यादृच्छिक बाइनरी पर भरोसा करना आपके खतरे के मॉडल में है।
| संस्करण | SHA-256 | VirusTotal |
|---|---|---|
| V1.0.0 | 0ecf5a62... | 4/72 |
SHA-256 को
certutil -hashfile Anvil.exe SHA256(Windows) याsha256sum Anvil.exe(Linux) से सत्यापित किया जा सकता है।
python anvil.py [--exe PATH | --service NAME | --pid PID] [options]
| फ़्लैग | विवरण |
|---|---|
--exe PATH | लक्ष्य निष्पादन योग्य। Procmon कैप्चर के लिए Medium IL पर लॉन्च किया गया। |
--service NAME | Windows सेवा का नाम। रजिस्ट्री से Exe हल किया गया; स्टार्टअप को कैप्चर करने के लिए सेवा पुनः प्रारंभ की गई। |
--pid PID | पहले से चल रही प्रक्रिया से जुड़ें। Procmon चल रही गतिविधि को कैप्चर करता है। |
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--modules LIST | all | चलाने के लिए मॉड्यूल की अल्पविराम-पृथक सूची। |
मॉड्यूल नाम: dll, com, registry, binary, configs, installdir, memory, symlink, unquoted, pesec, pipes
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--procmon-runtime SEC | 30 | सेकंड में Procmon कैप्चर विंडो। धीमी-शुरुआत वाले एप्लिकेशन के लिए बढ़ाएँ। |
डेस्कटॉप एप्लिकेशन का मूल स्कैन:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --report report.html
धीमी-शुरुआत वाले एप्लिकेशन के लिए लंबी कैप्चर विंडो:
python anvil.py --exe "C:\Program Files\MyApp\myapp.exe" --procmon-runtime 60 --scan-install-dir
Windows सेवा को लक्षित करें:
python anvil.py --service MyAppSvc --modules dll,binary,unquoted,registry
पहले से चल रही प्रक्रिया से जुड़ें:
python anvil.py --pid 4872 --report report.html --verbose
केवल विशिष्ट मॉड्यूल चलाएँ:
python anvil.py --exe "C:\App\app.exe" --modules dll,symlink,unquoted
अतिरिक्त कस्टम स्ट्रिंग के लिए प्रक्रिया मेमोरी स्कैन करें:
python anvil.py --exe "C:\App\app.exe" --modules memory --memory-strings "InternalSecret,DevPassword"
एयर-गैप्ड मशीन — Sysinternals मैन्युअल रूप से प्रदान करें (एक बार कॉपी किया गया):
python anvil.py --exe "C:\App\app.exe" --procmon "E:\Sysint\Procmon64.exe" --handle "E:\Sysint\handle.exe" --accesschk "E:\Sysint\accesschk.exe"
गंभीरता के अनुसार रंग-कोडित वैकल्पिक --verbose विवरण ब्लॉक के साथ। rich पैकेज की आवश्यकता है (स्वचालित रूप से स्थापित)।
--report findings.json)मशीन-पठनीय निष्कर्ष वस्तुओं की सरणी:
[
{
"severity": "P1",
"module": "DLL Hijacking",
"message": "[System→User] Phantom DLL: version.dll",
"detail": "DLL name : version.dll\nAttempted : C:\\ProgramData\\MyApp\\version.dll\n..."
}
]
--report report.html) [अनुशंसित]स्व-निहित एकल-फ़ाइल रिपोर्ट:
सभी .pmc फ़िल्टर फ़ाइलें रिपॉजिटरी की filters/ निर्देशिका में शामिल हैं — किसी सेटअप की आवश्यकता नहीं है। Procmon-आधारित मॉड्यूल उन्हें स्वचालित रूप से उठा लेंगे।
यदि कोई फ़िल्टर फ़ाइल खो जाती है या दूषित हो जाती है, तो ऊपर दिए गए नियमों का उपयोग करके Procmon में इसे पुनः बनाएँ: शर्तों को कॉन्फ़िगर करने के लिए Filter → Filter…, फिर File → Export Configuration… और filters/<name>.pmc में सहेजें।
Anvil अगले रन पर उस मॉड्यूल के लिए स्वचालित रूप से .pmc फ़ाइल उठा लेगा।
Anvil सुरक्षा अनुसंधान, बग बाउंटी शिकार, और अधिकृत प्रवेश परीक्षण कार्यों के लिए डिज़ाइन किया गया है। इसका उपयोग केवल उन प्रणालियों पर करें जिनके आप मालिक हैं या जिनके मूल्यांकन के लिए आपके पास स्पष्ट लिखित अनुमति है।
संचालन नोट्स
[Static Correlation]रिपोर्टिंग
निष्कर्ष टर्मिनल पर मुद्रित किए जाते हैं (रंग कोडिंग के साथ) और वैकल्पिक रूप से JSON या एक स्टैंडअलोन HTML रिपोर्ट में लिखे जाते हैं।
| सुविधा | AnviL | Spartacus | Robber | winPEAS | Procmon |
|---|
| स्वचालित खोज | ✅ | ✅ | ✅ | ✅ | ❌ |
| रनटाइम-सत्यापित खोज | ✅ | ❌ | ❌ | ❌ | ✅ |
| भूत DLL पहचान | ✅ | ✅ | ❌ | ❌ | ◐ |
| खोज-क्रम–जागरूक विश्लेषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| ACL-आधारित लिखने योग्यता सत्यापन | ✅ (AccessChk) | ◐ | ◐ | मूल | ❌ |
| प्रति-मॉड्यूल सिग्नल फ़िल्टरिंग | ✅ (.pmc फ़िल्टर) | ❌ | ❌ | ❌ | ❌ |
| गलत-सकारात्मक उन्मूलन (गेटेड पाइपलाइन) | ✅ | ❌ | ❌ | ❌ | ❌ |
| सेवा पुनरारंभ और PID पुनः कैप्चर | ✅ | ❌ | ❌ | ❌ | ❌ |
| Medium-IL उपयोगकर्ता अनुकरण | ✅ | ❌ | ❌ | ❌ | ❌ |
| DLL हाईजैकिंग (थिक-क्लाइंट जागरूक) | ✅ | ❌ | ❌ | ◐ | ❌ |
| COM हाईजैकिंग सहसंबंध | ✅ | ❌ | ❌ | ❌ | ❌ |
| नामित पाइप ACL / प्रतिरूपण विश्लेषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| सिमलिंक / जंक्शन दुरुपयोग का पता लगाना | ✅ | ❌ | ◐ | ◐ | ❌ |
| मेमोरी रहस्य (लाइव प्रक्रिया स्कैन) | ✅ | ❌ | ❌ | ◐ | ❌ |
| PE सुरक्षा / शमन विश्लेषण | ✅ | ❌ | ❌ | ◐ | ❌ |
| विशेषाधिकार-वृद्धि आकलन (गैर-शोषण) | ✅ | ✅ | ✅ | ❌ | ❌ |
| स्वचालित शोषण | ❌ | ✅ | ✅ | ❌ | ❌ |
| आत्मविश्वास / गंभीरता स्कोरिंग | ✅ (P1–P5) | ❌ | ❌ | ❌ | ❌ |
| लक्ष्य-विशिष्ट विश्लेषण (exe / svc / pid) | ✅ | ❌ | ❌ | ❌ | ✅ |
| संरचित रिपोर्टिंग (JSON / HTML) | ✅ | ❌ | ❌ | TXT | ❌ |
| स्व-निहित बाइनरी वितरण | ✅ | ✅ | ✅ | ✅ | ✅ |
| मॉड्यूल | फ़्लैग | यह क्या जाँचता है |
|---|
| DLL Hijacking | dll | .dll के लिए CreateFile ईवेंट — लिखने योग्य निर्देशिकाओं में भूत DLL और लोड किए गए DLL |
| COM Hijacking | com | COM सर्वर रजिस्ट्री कुंजियाँ जो मानक उपयोगकर्ताओं द्वारा लिखने योग्य हैं; ProgID के लिए बाइनरी स्कैन |
| Binary Hijacking | binary | .exe के लिए CreateFile ईवेंट — भूत EXE रोपण और लिखने योग्य EXE निर्देशिकाएँ |
| Insecure Configs | configs | लिखने योग्य निर्देशिकाओं से कॉन्फ़िग फ़ाइल पहुँच (.ini, .xml, .json, .yaml, आदि) |
| Install Directory | installdir | रूट ACL, एलिवेशन-मैनिफेस्ट EXE, और लिखने योग्य उपनिर्देशिकाएँ |
| Memory Strings | memory | लाइव प्रक्रिया मेमोरी स्कैन क्रेडेंशियल्स, टोकन, API कुंजियाँ, JWT, कनेक्शन स्ट्रिंग्स के लिए |
| Symlink Attacks | symlink | उपयोगकर्ता-लिखने योग्य temp / appdata पथों में जंक्शन और सिमलिंक वेक्टर |
| Unquoted Service Path | unquoted | बिना उद्धरण वाले ImagePath वाली सेवाएँ जहाँ मध्यवर्ती भूत निर्देशिकाएँ लिखने योग्य हों |
| Registry Privesc | registry | रजिस्ट्री कुंजियाँ जो मानक उपयोगकर्ताओं द्वारा लिखने योग्य हों और सेवा/अनुप्रयोग व्यवहार को नियंत्रित करती हों |
| PE Security Flags | pesec | लक्ष्य बाइनरी पर गुम ASLR, DEP, CFG, SafeSEH, और Authenticode |
| Named Pipe ACL | pipes | नामित पाइप जिनमें अनुमेय DACL या प्रतिरूपण-सक्षम ACE हों |
| बाइनरी | द्वारा उपयोग किया गया | डाउनलोड |
|---|
Procmon64.exe | सभी Procmon-आधारित मॉड्यूल | ProcessMonitor.zip |
handle.exe | नामित पाइप ACL मॉड्यूल | Handle.zip |
accesschk.exe | नामित पाइप ACL मॉड्यूल — पाइप DACL गणना | AccessChk.zip |
| फ़्लैग | विवरण |
|---|
--procmon PATH | Procmon64.exe का पथ। %LOCALAPPDATA%\Anvil\sysinternals\ में कॉपी किया गया |
--handle PATH | handle.exe का पथ। %LOCALAPPDATA%\Anvil\sysinternals\ में कॉपी किया गया |
--accesschk PATH | accesschk.exe का पथ। %LOCALAPPDATA%\Anvil\sysinternals\ में कॉपी किया गया |
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|
--report FILE | — | एक रिपोर्ट उत्पन्न करें — एक्सटेंशन प्रारूप निर्धारित करता है: .json JSON के लिए, .html (या कोई अन्य) एक स्व-निहित HTML रिपोर्ट के लिए। |
--verbose | बंद | टर्मिनल में पूर्ण निष्कर्ष विवरण ब्लॉक प्रिंट करें। |
--no-color | बंद | ANSI रंग आउटपुट अक्षम करें। |
--skip-authenticode | बंद | Authenticode हस्ताक्षर जाँच छोड़ें (बड़े इंस्टॉल डीर के लिए तेज़)। |
--scan-install-dir | बंद | PE सुरक्षा जाँचों में इंस्टॉल निर्देशिका के सभी DLL शामिल करें। |
--memory-strings STR,... | — | प्रक्रिया मेमोरी में खोजने के लिए अतिरिक्त अल्पविराम-पृथक स्ट्रिंग। |
| स्तर | लेबल | सामान्य CVSS | अर्थ |
|---|
| P1 | क्रिटिकल | 8.0 – 8.8 | स्वचालित-ट्रिगर विशेषाधिकार वृद्धि (कोई उपयोगकर्ता सहभागिता नहीं) |
| P2 | उच्च | 7.0 – 7.9 | उपयोगकर्ता सहभागिता या कमजोर ट्रिगर के साथ शोषण योग्य |
| P3 | गलत कॉन्फ़िगरेशन | 4.0 – 6.9 | बिना उद्धरण वाले पथ, गुम शमन — सीधे शोषण योग्य नहीं |
| P4 | कम प्रभाव | 0.1 – 3.9 | सीमित वास्तविक-विश्व प्रभाव वाले सूचनात्मक वेक्टर |
| P5 | सूचनात्मक | N/A | संदर्भ और अवलोकन, भेद्यता नहीं |
| फ़ाइल | मॉड्यूल | मुख्य फ़िल्टर नियम |
|---|
filters/dll.pmc | DLL Hijacking | Operation is CreateFile, Path ends with .dll |
filters/binary.pmc | Binary Hijacking | Operation is CreateFile, Path ends with .exe |
filters/config.pmc | Insecure Configs | Operation is CreateFile (एक्सटेंशन फ़िल्टर कोड में) |
filters/com.pmc | COM Hijacking | Operation is RegQueryKey, Path contains HKLM |
filters/symlink.pmc | Symlink Attacks | Operation is CreateFile |